2017-07-07 21 views
1

大量の未フォーマットの読み取り専用テキストファイルを定期的に消費し、それらのファイルの中に特定のコンテンツ/単語が存在するかどうかを確認する必要があります。このファイルはすべて英数字で構成されています。しかし、これらの大きな静的ファイルの1つについてストリームのendに読んでも問題があります。NodeJSを使用して大きな静的ファイルをストリーミングする

以下は、endに届いていないことに気付いてから実行しようとした、最も簡単なコードのコピーです。これはまだendイベントをトリガーしません。 dataの多くの反復/チャンクが読み取られていますが、ファイルのデータのすべてが決して読み取られることはなく、endは決してトリガーされません。

function readFile(file) { 
    const readStream = fs.createReadStream(file, { 
     fd: null, 
     flags: 'r', 
     encoding: 'utf-8', 
     allowVolatile: true, 
     highWaterMark: staticHighWaterMark, 
    }); 

    readStream.on('data', (chunk) => { 
     console.log('DATA chunk', chunk.length); 
    }); 

    readStream.on('end',() => { 
     console.log('END file'); 
    }); 
} 

これは、私はそれが私の環境で何かあれば疑問に思い始めているほど簡単ですが、ストリームを読み込むための上記の単純な論理では問題として確認何がある場合、私に知らせてください。

注:highWaterMarkオプションを増やし続けると、ファイルをさらに通過させますが、依然としてファイルのendには届きません。しかし、それはファイルの終わりに達する、または到達しないことに違いをもたらすべきではなく、「チャンク」ごとに読み取るデータの量を制御します。

+0

好奇心。それを行単位で読みたいのですか? –

+0

それはそうする必要はありませんが、今日はnodejs APIによってサポートされていると思います。あなたはそれがファイルの '終わり 'に達することができると違いがあると思いますか? – user376327

+0

代わりに 'readline'(https://nodejs.org/dist/latest-v6.x/docs/api/readline.html)を使うことをお勧めします。私はあなたの問題が不思議です。私はあなたがテストするためのコードを投稿するつもりです。 –

答えて

0

これをテストし、これでファイル全体を読むことができるかどうか確認できますか?

function readFileV2(file) { 
    const readStream = fs.createReadStream(file, { 
     fd: null, 
     flags: 'r', 
     encoding: 'utf-8', 
     allowVolatile: true, 
     highWaterMark: staticHighWaterMark, 
    }); 

    readStream.pipe(process.stdout); 
} 
関連する問題