Кратко
СкопированоОбъект с сырыми данными фиксированного размера, который представляет собой кусочек памяти. Работать напрямую с данными из объекта нельзя, однако можно создавать отображения этих данных и манипулировать содержимым 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
Как понять
СкопированоБуфер — пространство в памяти, где хранятся бинарные данные. Про память подробнее узнаете из статьи «Как устроена память».