このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

ArrayBuffer

Baseline
広く利用可能
*

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

* この機能の一部は、対応レベルが異なる場合があります。

ArrayBuffer オブジェクトは、一般的な生のバイナリーデータバッファーを表現するために使用します。

これはバイトの配列で、他の言語ではよく「バイト配列」と呼ばれます。ArrayBuffer の内容を直接操作することはできません。代わりに、バッファーを特定の形式で表現する型付き配列オブジェクトまたは DataView オブジェクトのいずれかを作成して、バッファーの内容を読み書きします。

ArrayBuffer() コンストラクターは、指定した長さの ArrayBuffer をバイト単位で作成します。既存のデータから、たとえば、Base64 文字列やローカルファイルから配列バッファーを取得することもできます。

ArrayBuffer移譲可能オブジェクトです。

解説

ArrayBuffer のサイズ変更

ArrayBuffer オブジェクトは maxByteLength オプションを指定して ArrayBuffer() コンストラクターを呼び出すことで、サイズを変更することができるようになります。ArrayBuffer がサイズ変更可能かどうか、またその最大サイズを知るには、それぞれ resizablemaxByteLength のプロパティにアクセスすれば分かります。サイズ変更可能な 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()