我正在使用ReadLine逐行讀取一個非常大的文件,以便能夠檢測到可以將它分割成多個有意義的片段的位置,並將它們分割爲多個其他文件。我使用WriteStream來寫入這些文件。當正則表達式檢測到剪切的位置時,我結束()當前打開的WriteStream併爲剛剛讀取的行打開一個新的。問題是,所有這些文件最終被截斷,就好像end()調用沒有完成它的工作一樣。寫入流最終溢出
我檢查了write()的成功並在緩衝區滿時暫停輸入流。這是我的代碼的相關部分:
var rl = readline.createInterface({
input: fs.createReadStream('basesystem.js',{encoding:'utf8'}),
output: process.stdout
});
rl.on('line', function (line) {
var match = rexp.exec(line);
if (match) {
out.end();
console.log(path.join(PATH, match[2],'.js'));
out = fs.createWriteStream(path.join(PATH,match[2]) + '.js', {encoding:'utf8'});
}
if (!out.write(line + '\n')) {
console.log('***** paused **** ');
rl.pause();
out.once('drain', function() {
console.log('***** resume **** ');
rl.resume();
});
}
});
當我發現寫()失敗,我puase上的ReadLine輸入流,並聽取了「漏」事件,當我恢復它。我試着讓'聽力'的聽衆永久存在,但似乎來自ReadLine的線路不斷出現。所有文件最終都被截斷。即使在暫停時,ReadLine似乎也不會停止發送'行'事件。
最初的WriteStream(out)在此示例之前創建,我在ReadLine流上偵聽'close'事件以結束()最終文件,但無論如何,所有文件(不僅僅是最後一個)都會被截斷。
顯示屏顯示所有**暫停*讀取沿線在控制檯上的跡象,但沒有簡歷。所有的恢復**行在最後一次齊全。
在此先感謝