大量の未フォーマットの読み取り専用テキストファイルを定期的に消費し、それらのファイルの中に特定のコンテンツ/単語が存在するかどうかを確認する必要があります。このファイルはすべて英数字で構成されています。しかし、これらの大きな静的ファイルの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
には届きません。しかし、それはファイルの終わりに達する、または到達しないことに違いをもたらすべきではなく、「チャンク」ごとに読み取るデータの量を制御します。
好奇心。それを行単位で読みたいのですか? –
それはそうする必要はありませんが、今日はnodejs APIによってサポートされていると思います。あなたはそれがファイルの '終わり 'に達することができると違いがあると思いますか? – user376327
代わりに 'readline'(https://nodejs.org/dist/latest-v6.x/docs/api/readline.html)を使うことをお勧めします。私はあなたの問題が不思議です。私はあなたがテストするためのコードを投稿するつもりです。 –