2016-07-31 13 views
3

巨大なバイナリファイル(200GBを超えるもの)を解析できるNode.jsモジュールを作成したいと思います。各ファイルはチャンクに分割され、各チャンクは10GBを超えることができます。私は、ファイルを読み込むためにフローティングと非フローティングの方法を使用しようとしましたが、問題は、チャンクを解析中に読み込みバッファの終わりに達したため、次のonDataイベントが発生する前にそのチャンクの解析を終了する必要があります。これは私が試したものです:Node.jsの膨大なバイナリファイルの解析

私は8GBのRAMしか持っていないので、チャンク全体をプロセスメモリに読み込むことはできません。ストリームからデータを同期的に読み取るにはどうすればいいですか?またはバッファの末尾に達したときにparseChunkの機能を一時停止し、新しいデータが利用できるようになるまで待機するにはどうすればよいですか?

+0

ストリームを使用すると、読み込み/書き込みとバッファリングがストリームに切り替わります。しかし、あなたは正確に何が読み込まれているのかを正確にコントロールしたいと思うようです。あなたが完全に制御していないストリームがなければ、ディスクから直接読んでほしいバイト数を正確に読み取るのはなぜですか? – jfriend00

+0

@ jfriend00。これらのファイルは私のハードディスク上にある必要はないからです。ストリームは、サーバーファイル、他のプロセスメモリの一部または一部のバッファから取得できます。 –

答えて

0

おそらく私は何かが不足しているかもしれませんが、私が知る限り、これは異なる構文のストリームを使用して実装できない理由はありません。私はここで行わようにあなたは、チャンクのサイズを自分で指定した場合、要求されたバイトの量は、ストリームの終わりで利用できない場合、nullが返される。

let chunk; 
let Nbytes; // # of bytes to read into a chunk 
stream.on('readable',()=>{ 
    while(chunk = stream.read(Nbytes)!==null) { 
    // call whatever you like on the chunk of data of size Nbytes 
    } 
}) 

ノートを使用したいですこれは、もはやストリーミングするデータがないことを意味するものではありません。したがって、ファイルの末尾にサイズが< Nbytesの「整えられた」バッファオブジェクトが戻ってくるはずです。

関連する問題