0

各バイトがレコードであるバイナリデータファイルがあり、xそのデータを解読するためのフォーマット/マスク (ただし、表示したい場合) があります。それshort short int short float doubleは、、、何とか何とかのようなものです。だから私はFile APIでこのファイルを読んでいます。最終的にはArrayBufferを使用する必要がありますが、まだそこにいません...私の質問は2つあります。まず、最も直接的に、バイナリ ファイルから ArrayBufferにすべてのバイトを読み込む最良の方法は何ですか?x

第二に、私はいくつかの問題に遭遇しています.500kbのバイナリファイルを読み取ると、以下のスクリプトが5GB以上のRAMをすぐにいっぱいにするのはなぜですか?

$('input[type="file"]').change(function(event) {

  // FileList object
  var files = event.target.files;
  for (var i = 0, f; f = files[i]; i++) {

    var reader = new FileReader();

    // closures and magnets, how do they work
    reader.onload = (function(f) {
      return function(event) {

        // data file starts with header XML
        // indexOf +9 for </HEADER> and +1 for null byte
        var data_start = event.target.result.indexOf('</HEADER>')+10,

          // leverage jQuery for XML
          header = $(event.target.result.slice(0,data_start)),
          rec_len = parseInt(header.find('REC_LEN').text(),10);

        // var ArrayBuffer
        // define ArrayBufferView

        // loop through records
        for (var i = data_start; i<event.target.result.length; i+=rec_len) {

          // fill ArrayBuffer
          // add data to global data []
          console.log(i+' : '+event.target.result.slice(i, i+rec_len));
        }
      };
    })(f);

    // Read as Binary
    reader.readAsBinaryString(f);
  }
});
4

1 に答える 1

0

少なくともいくつかの一般的なヒント:

DataViewの使用は柔軟ですが、少し遅くなりparseIntます。文字列で呼び出すよりも高速ですが、配列ビューほど高速ではありません。利点は、バイナリ データが必要な場合に、さまざまなバイト オーダーをサポートすることです。を使用reader.readAsArrayBuffer(f)してから、onloadコールバックで次のようなものを使用します

var dv = new DataView(arrayBuffer, [startCoord, [endCoord]]),
    result = [];
// in some loop for i...
    result[i] = [];
    result[i].push(dv.getInt8(coord));
    // coord += offset;
    result[i].push(dv.getFloat32(coord));
// end some loop

前述したように、ArrayBuffer で複数のビューを作成する方が高速ですが、(私の知る限り) カーソル位置を変更することはできません。そのため、混合データ型が問題になります。

結果を型付き配列に入れるには、次のように宣言するだけですvar col1 = Uint8Array(length);。型付き配列のサブクラスは、ここにリストされています。私の経験では、型付き配列はパフォーマンスの点であまりメリットがないことに注意してください。型付き配列の jsperf テストについては、Google で検索してください。

于 2013-02-13T17:56:42.260 に答える