nodejsに並行性の問題があるように見えます。私はこれが可能ではないという事実を認識しています。Nodejs filestream concurrency
ファイルの行でデータを処理していて、それを別のファイルに行単位で書き出しています。出力ファイルでは、行が上書きされていることに気付きました。そのたびに、出力の行が他の行の半分上書きされているように見えます。 読み込みストリームからデータを読みます。
let iStream = fs.createReadStream(inputFile);
let oStream = fs.createWriteStream(outputFile);
let remaining = '';
iStream.on('data',(data)=>{
remaining += data;
let line = remaining.split(/\r?\n/);
let lines = line.length;
if(lines > 0) {
remaining = line[lines - 1];
line.length = lines - 1;
line.forEach((curr)=>{
oStream.write(processLine(curr));
});
});
このスキームで書き込み障害が発生する可能性はありますか、それとも別の場所を見なければなりませんか?
'processLine()'とは何ですか?それは完全に同期ですか?参考までに、あなたは 'remaining = line.pop()'でコードを単純化することができます。 – jfriend00
また、 '.write()'は出力バッファがいっぱいで、 'drain'イベントが再び書き込みを開始するのを待たなければならないことを示すブール値を返します。 [the doc](https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback)を参照してください。 – jfriend00
[トランスフォームストリーム](http://codewinds.com/blog/2013-08-20-nodejs-transform-streams.html)を使い、 '.pipe()'を使ってあなたのためのフロー制御。 – jfriend00