ArrayBuffer
Baseline
広く利用可能
*
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
* この機能の一部は、対応レベルが異なる場合があります。
ArrayBuffer オブジェクトは、一般的な生のバイナリーデータバッファーを表現するために使用します。
これはバイトの配列で、他の言語ではよく「バイト配列」と呼ばれます。ArrayBuffer の内容を直接操作することはできません。代わりに、バッファーを特定の形式で表現する型付き配列オブジェクトまたは DataView オブジェクトのいずれかを作成して、バッファーの内容を読み書きします。
ArrayBuffer() コンストラクターは、指定した長さの ArrayBuffer をバイト単位で作成します。既存のデータから、たとえば、Base64 文字列やローカルファイルから配列バッファーを取得することもできます。
ArrayBuffer は移譲可能オブジェクトです。
解説
>ArrayBuffer のサイズ変更
ArrayBuffer オブジェクトは maxByteLength オプションを指定して ArrayBuffer() コンストラクターを呼び出すことで、サイズを変更することができるようになります。ArrayBuffer がサイズ変更可能かどうか、またその最大サイズを知るには、それぞれ resizable と maxByteLength のプロパティにアクセスすれば分かります。サイズ変更可能な ArrayBuffer には、 resize() を呼び出して新しいサイズを割り当てることができます。新しいバイトは 0 に初期化されます。
これらの機能により、ArrayBuffer のサイズ変更がより効率的になります。そうしないと、新しいサイズのバッファーのコピーを持たなければなりません。また、この点で JavaScript が WebAssembly と同等になります(WASM の線形メモリーは WebAssembly.Memory.prototype.grow() でサイズ変更が可能です)。
ArrayBuffer の移譲
ArrayBuffer オブジェクトは、ウェブワーカーやサービスワーカーなど、異なる実行コンテキスト間で構造化クローンアルゴリズムを使用して移譲することができます。これは、ArrayBuffer を移譲可能オブジェクトとして Worker.postMessage() または ServiceWorker.postMessage() の呼び出しに渡すことで実現されます。純粋な JavaScript では、 transfer() または transferToFixedLength() メソッドを使用して、ある ArrayBuffer から他へメモリーの所有権を移すこともできます。
ArrayBuffer が移譲されると、元のコピーは分離状態になります。これは、そのコピーが使用できなくなるということです。いかなる時点においても、基盤となるメモリーに実際にアクセスできる ArrayBuffer のコピーは一つだけです。分離されたバッファーには以下のような挙動になります。
byteLengthは 0 になります(そのバッファーと、関連付けられた型付き配列ビューの両方で)。resize()や