配列バッファー(ArrayBuffer)
配列バッファーの作成
new ArrayBuffer()
配列バッファー(ArrayBuffer
)を作成します。ArrayBuffer
はデータを格納するバイト列のメモリ領域です。ArrayBuffer
には直接アクセスすることはできず、型付き配列(TypedArray
) またはデータビュー(DataView
) をマッピングしてアクセスします。下記の例では 12 バイトの ArrayBuffer
を作成し、それに 2バイト長×6個の要素からなる Int16Array
型付き配列をマッピングしています。
const buf = new ArrayBuffer(12); const arr = new Int16Array(buf); console.log(arr);
ArrayBuffer.isView(array)
array
が型付き配列(TypedArray
) またはデータビュー(DataView
) であれば true
を、さもなくば false
を返します。
const arr = new Int16Array(3);
console.log(ArrayBuffer.isView(arr)); // => true
配列バッファーのリサイズ
arraybuffer.byteLength
ArrayBuffer
のサイズをバイト単位で返します。
const buf = new ArrayBuffer(12);
console.log(buf.byteLength); // => 12
maxByteLength
作成時に { maxByteLength: bytes }
を指定することで、領域としては bytes
バイトの領域をあらかじめ確保しておき、その範囲内でリサイズ可能な ArrayBuffer
を作成することができます。プロパティ maxByteLength
は作成時に指定した最大バイト数を返します。
const buf = new ArrayBuffer(12, { maxByteLength: 24 }); console.log(buf.byteLength); // => 12 console.log(buf.maxByteLength); // => 24 buf.resize(24); console.log(buf.byteLength); // => 24
arrayBuffer.resizable
ArrayBuffer
がリサイズ可能な否かを true
または false
で示します。
const buf = new ArrayBuffer(12, { maxByteLength: 24 });
console.log(buf.resizable); // => true
arrayBuffer.resize(n)
ArrayBuffer
を 0~maxByteLength
の範囲内でリサイズします。
const buf = new ArrayBuffer(12, { maxByteLength: 24 }); buf.resize(24);
配列バッファーの複製
arrayBuffer.slice(start, end)
新しい ArrayBuffer
を作成し、元のバッファーの start
から end - 1
バイト目の値をコピーします。end
を省略した場合は最後までをコピーします。下記の例では 6 バイトの ArrayBuffer
を作成し、その 2 バイト目から 5 - 1 = 4 バイト目の 3バイトをコピーした新たな ArrayBuffer
を作成しています。
const buf1 = new ArrayBuffer(6);
const arr1 = new Int8Array(buf1);
arr1.set([1, 2, 3, 4, 5, 6]);
const buf2 = buf1.slice(2, 5);
const arr2 = new Int8Array(buf2);
console.log(arr2); // => Int8Array(3) [3, 4, 5]
arrayBuffer.transfer(bytes)
bytes
バイトの新しい ArrayBuffer を返却します。元データを arrayBuffer
からコピーします。短くなる場合は切捨てられ、長くなる場合は 0 が埋められます。元のバッファのリサイズ可否も継承します。元のバッファーは削除(デタッチ)されます。ES2024 で追加されました。
const buf1 = new ArrayBuffer(8, { maxByteLength: 32 }); console.log(buf1.byteLength); // => 8 console.log(buf1.resizable); // => true const buf2 = buf1.transfer(16); console.log(buf2.byteLength); // => 16 console.log(buf2.resizable); // => true
arrayBuffer.transferToFixedLength(bytes)
bytes
バイトの新しい ArrayBuffer を返却します。元データを arrayBuffer
からコピーします。短くなる場合は切捨てられ、長くなる場合は 0 が埋められます。元のバッファのリサイズ可否は継承しません。元のバッファーは削除(デタッチ)されます。ES2024 で追加されました。
const buf1 = new ArrayBuffer(8, { maxByteLength: 32 }); console.log(buf1.byteLength); // => 8 console.log(buf1.resizable); // => true const buf2 = buf1.transferToFixedLength(16); console.log(buf2.byteLength); // => 16 console.log(buf2.resizable); // => false
arrayBuffer.detached
元のバッファーが transfer()
や transferToFixedLength()
によってすでに削除(デタッチ)されているか否かを返します。
const buf1 = new ArrayBuffer(6); console.log(buf1.detached); // => false const buf2 = buf1.transfer(4); console.log(buf1.detached); // => true