写入stream最终溢出

我正在使用ReadLine逐行读取一个非常大的文件,以便能够检测到可以将其分割成多个有意义片段的地方。 我使用WriteStream来写入这些文件。 当正则expression式检测到剪切的地方时,我结束()当前打开的WriteStream并为刚刚读取的行打开一个新的。 问题是,所有这些文件最终被截断,就好像end()调用没有完成它的工作。

我检查了write()的成功并在缓冲区满时暂停inputstream。 这是我的代码的相关部分:

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(); }); } }); 

当我发现write()失败的时候,我把ReadLine上的inputstream放到一边,当我重新开始时听着“drain”事件。 我试着让'听听'永久的听众,但似乎来自ReadLine的线路不断。 所有的文件都被截断了。 即使在暂停时,ReadLine似乎也不会停止发送“行”事件。

最初的WriteStream(out)是在这个示例之前创build的,我在ReadLinestream上侦听'close'事件以结束()最终文件,但无论如何,所有文件(不只是最后一个)都会被截断。

显示屏显示控制台上的所有**暂停*符号,而不是简历 。 所有的简历**行都在一次结束。

提前致谢

我发现,这是ReadLine的错。 当ReadLine接收到一个暂停()时,它暂停自己的inputstream,但是如果它有一个已经分割成行的缓冲区,它将保持为已经从前一个缓冲区分离的每一行发出“行”事件。 它只会在该行数组完成时停止。 我已经在Node的网站上提交了错误报告。