90

遅いかもしれませんし、それが原因かもしれませんが、私はArrayBufferのドキュメントを読んだだけで、本当に役立つことは1つも考えられません。

誰かが私を啓発できますか?

画像を使わずに誰もが思いつく用途はありますか?

4

3 に答える 3

73

基本的に、ArrayBufferはバイナリデータを保持するために使用されます。たとえば、画像のバイナリデータにすることができます。

他の言語では、バッファは非常に便利であることが証明されています。はい、もちろん、他のデータ型よりも理解/使用するのは少し難しいです。

ArrayBufferを使用して、jpg画像(RGBバイト)のデータを取得し、アルファバイト(つまりRGBA)を追加することでそこからpngを生成できます。

Mozillaサイトでは、ここでArrayBufferを少し使用しています。

複雑なデータ構造の操作

単一のバッファーをさまざまなタイプの複数のビューと組み合わせて、バッファーへのさまざまなオフセットから開始することにより、複数のデータ型を含むデータオブジェクトを操作できます。これにより、たとえば、js-ctypesの使用中に使用する必要のあるWebGL 、データファイル、またはC構造体の複雑なデータ構造体を操作できます。

このC構造を考えてみましょう。

struct someStruct {  
  unsigned long id;  
  char username[16];  
  float amountDue;  
};  

次のような形式のデータを含むバッファにアクセスできます。

var buffer = new ArrayBuffer(24);  

// ... read the data into the buffer ...  

var idView = new Uint32Array(buffer, 0, 1);  
var usernameView = new Uint8Array(buffer, 4, 16);  
var amountDueView = new Float32Array(buffer, 20, 1);  

次に、たとえば、で支払うべき金額にアクセスできます amountDueView[0]

注: C構造体のデータ構造体の配置は、プラットフォームに依存します。これらのパディングの違いについては、予防措置と考慮事項を考慮してください。

于 2012-07-19T06:25:21.267 に答える
9

AnArrayBufferは、RAM内のバイナリデータのチャンクです。ArrayBuffer読み取りと書き込みのためにを「開く」には、いくつかの方法があります。

  • などの型付き配列Uint16Arrayは、バッファを整数の配列として扱うことにより、バッファの読み取りと書き込みを行うことができます。エンディアンを制御することはできません; CPUの優先エンディアンを使用します。Uint8Array個々のバイトの制御(コピー、スライスなど)に役立ちます。

  • DataViewそれほど単純ではありませんが、より詳細に制御できます。エンディアン、整数サイズ、およびバイトインデックスを選択できます(たとえば、32ビットで割り切れないインデックスで32ビット整数にアクセスできます)。これらは、同じ整数を読み書きするたびに指定できますDataView

詳細:https ://javascript.info/arraybuffer-binary-arrays

于 2020-07-30T06:25:15.140 に答える
7

画像以外にも、UDPなどのプロトコルで使用される低レベルのネットワークデータパケットを正確に構築および破棄するのに役立ちます。

于 2019-08-18T03:03:25.070 に答える