我希望下面的代码创建一个Readline接口,其中包含一个包含~~ 1000个URL列表的文件的可读流,从输入流开始流式传输(将一行记录到控制台),然后暂停:
var readline = require('readline');
var fs = require('fs');
var rlinterface = readline.createInterface({
input: fs.createReadStream('urls.txt'),
output: null,
terminal: false
});
rlinterface.on('pause', function() {
console.log('Readline paused.');
});
rlinterface.on('line', function(line){
console.log(line);
rlinterface.pause();
});
pause
事件的侦听器通知我应该暂停流,但是输入流中文件中的所有行都会记录到控制台,这表明该流从未暂停。即使流不会在第一行之后立即暂停(可能需要一些额外的行captured in a buffer),我也不希望来自输入流的文件中的所有行都在流之前流式传输'暂停'。那是怎么回事?
答案 0 :(得分:3)
可能发生的事情是整个文件被一次性读入,当你pause()
时,没有什么可读的。具体来说,highWaterMark
的默认fs.ReadStream
为64KB,因此可读流可以在第一次读取时轻松使用整个17KB文件,因为它会尝试将内部缓冲区保持为{{{ 1}}。