83

http://www.html5rocks.com/en/tutorials/file/xhr2/を読んで、 anArrayBufferと aの違いを理解しようとしていBlobます。

どちらのコンテナもビットで構成されていませんか? したがって、両方のコンテナーをさまざまな方法 (32 ビット チャンク、16 ビット チャンクなど) で見ることはできませんか?

4

2 に答える 2

99

概要

(を使用して)書き込み/編集する機能が必要でない限り、おそらくフォーマットが最適です。ArrayBufferBlob

詳細

別のhtml5rocks ページからこの質問にたどり着きました。、そして@Bart van Heukelomのコメントが役立つことがわかったので、ここで回答に昇格させたいと思いました。

ArrayBufferまた、Blobオブジェクトに固有の役立つリソースも見つけました。要約すると、不変/「生データ」オブジェクトであることに重点が置かれているにもかかわらず、オブジェクトは簡単にBlobBlob操作できます。

を比較/対比するArrayBufferリソースBlob:

  • 可変性
    • anは変更ArrayBufferできます(例: a で)DataView
    • aBlob不変です
  • ソース / メモリ内の可用性
    • ArrayBuffer はメモリ内にあり、操作できます。
    • Blob は、ディスク上、キャッシュ メモリ内、およびすぐには利用できないその他の場所にある可能性があります。
  • アクセス層
  • 変換
  • 他のライブラリでの使用
    • jsZip; との両方(new JSZip()).loadAsync(...)受け入れます。 ArrayBufferBlobString/Array of bytes/ArrayBuffer/Uint8Array/Buffer/Blob/Promise
  • プロトコルはArrayBufferとBlobをどのように処理しますか
    • Websocket (別名 WS / WSS)
      • WebSocket のbinaryTypeプロパティ(「arraybuffer」または「blob」の値を持つことができます) を使用して、「WebSocket 接続を介して受信されるバイナリ データのタイプを制御します」。
    • XmlHttpRequest (別名 XHR)
      • xhr のresponseTypeプロパティを使用して、 「サーバーからの予期される応答タイプを変更する」 (有効な値には、「arraybuffer」、「blob」、および「document」、「json」、「text」などのその他の値が含まれます)
      • 応答プロパティには、ArrayBuffer、Blob、Document、JSON、または文字列として、エンティティ本体が含まれます。responseType

その他の役立つドキュメント:

このArrayBufferオブジェクトは、汎用の固定長生バイナリ データ バッファーを表すために使用されます。;の内容を直接操作することはできませんArrayBuffer代わりに、型指定された配列オブジェクトのいずれか、またはDataView特定の形式でバッファーを表すオブジェクトを作成し、それを使用してバッファーの内容を読み書きします。

オブジェクトは、不変の生データ のファイルのようなBlobオブジェクトを表します。必ずしも JavaScript ネイティブ形式ではないデータを表します。インターフェイスは に基づいており、blob 機能を継承し、ユーザーのシステム上のファイルをサポートするように拡張しています。BlobFileBlob

于 2016-10-10T05:00:24.833 に答える
26

ページで説明しています。

ArrayBuffer

ArrayBuffer は、バイナリ データの一般的な固定長コンテナーです。生データの一般化されたバッファが必要な場合、これらは非常に便利ですが、これらの背後にある真の力は、JavaScript 型付き配列を使用して、基になるデータの「ビュー」を作成できることです。実際、単一の ArrayBuffer ソースから複数のビューを作成できます。たとえば、同じデータから既存の 32 ビット整数配列と同じ ArrayBuffer を共有する 8 ビット整数配列を作成できます。基礎となるデータは同じままで、異なる表現を作成するだけです。

BLOB

Blob を直接操作したい場合や、ファイルのバイトを操作する必要がない場合は、xhr.responseType='blob' を使用します。

于 2012-08-05T23:51:18.063 に答える