Кратко
СкопированоОбъект с сырыми данными фиксированного размера, который представляет собой кусочек памяти. Работать напрямую с данными из объекта нельзя, однако можно создавать отображения этих данных и манипулировать содержимым Array
через них.
Типизированные массивы – отображения содержимого Array
. Они упрощают работу с тяжёлыми данными, например, видео, аудио и анимациями. Их часто используют с различными API — WebGL, Canvas 2D, XMLHttpRequest2 и так далее.
Пример
Скопированоconst buffer = new ArrayBuffer(3)const view = new Int8Array(buffer)console.log(view)// Int8Array(3) [0, 0, 0, buffer: ArrayBuffer(3),// byteLength: 3, byteOffset: 0, length: 3,// Symbol(Symbol.toStringTag): 'Int8Array']
const buffer = new ArrayBuffer(3) const view = new Int8Array(buffer) console.log(view) // Int8Array(3) [0, 0, 0, buffer: ArrayBuffer(3), // byteLength: 3, byteOffset: 0, length: 3, // Symbol(Symbol.toStringTag): 'Int8Array']
Как пишется
СкопированоЭлементами из Array
нельзя манипулировать без представления. По сути это просто ссылка на часть памяти, в которой хранятся сырые данные.
Всегда используйте оператор new
для создания Array
. Первый аргумент конструктора объекта Array
определяет количество байт, которое нужно выделить для хранения данных.
new ArrayBuffer(8)
new ArrayBuffer(8)
Представление можно создать при помощи объектов Typed
или Data
. Они позволяют читать и записывать данные из буфера в нужном формате.
const buffer = new ArrayBuffer(1)const asUInt = new Uint8Array(buffer)const asInt = new Int8Array(buffer)asInt[0] = 1console.log(asUInt[0])// 1asInt[0] = -1console.log(asUInt[0])// 255
const buffer = new ArrayBuffer(1) const asUInt = new Uint8Array(buffer) const asInt = new Int8Array(buffer) asInt[0] = 1 console.log(asUInt[0]) // 1 asInt[0] = -1 console.log(asUInt[0]) // 255
В этом примере создали два отображения для одного и того же буфера данных — знаковый и беззнаковый Int
. Записывая -1
, мы получаем следующие бинарные данные: 0b11111111. Это соответствует значению 255.
Array
можно открепить от соответствующей ему области памяти, в отличие от SharedArray
. Чаще всего это нужно при передаче объекта между потоками. Array
, переданный в новый поток, становится откреплённым в старом потоке. Из него больше нельзя читать данные.
Свойства
Скопированоlength
— длинаArray
в байтах. По умолчанию равна 1.Buffer byte
— размерLength Array
в байтах, если для буфера используется методBuffer ArrayBuffer
.. prototype . resize ( ) max
— максимальный размерByte Length Array
в байтах, до которого может быть увеличен буфер.Buffer resizable
— можно ли изменять размер буфера. Возвращаетtrue
илиfalse
.detached
— был ли отсоединён новый массив от старого. Возвращаетtrue
илиfalse
.
Методы
Скопировано.is
— возвращает представление буфера. Это может бытьView ( ) true
илиfalse
..resize
— увеличивает размер( ) Array
в байтах до указанного числа.Buffer .slice
— возвращает новый( ) Array
, который содержит копию старого.Buffer .transfer
— возвращает новый( ) Array
, который, в том числе, содержит данные из старого.Buffer .transfer
— создаёт новыйTo Fixed Length ( ) Array
с неизменяемым размером и отсоединяет его от старого.Buffer
Как понять
СкопированоБуфер — пространство в памяти, где хранятся бинарные данные. Про память подробнее узнаете из статьи «Как устроена память».