必须在可读事件处理程序中反复调用readable.read()吗?



假设我已经创建了一个名为Parser的转换流,它可以像普通流一样写入,但可以作为对象流读取。对于使用此转换流的代码,我使用readable事件:

var parser = new Parser();
parser.on('readable', function () {
    var data = parser.read();
    console.log(data);
});

在这个事件处理程序中,我必须重复调用parser.read()吗?或者,readable是否会对从转换流中推出的每个对象自行启动?

根据节点文档,"一旦内部缓冲区被耗尽,当有更多数据可用时,一个可读事件将再次触发,"因此,如果您只调用read()一次,而仍然有更多的数据要读取,您将不得不记住read()稍后。

你可以在while循环中调用read()(在你的'readable'事件处理程序中),直到它返回null,然后等待下一个'readable'事件。

如果你没有指定一个大小,你只需要在每次事件触发时调用它一次。每次有更多的数据时,Readable会自动触发。

然后你有readable.on('end', ...,它将允许你知道什么时候没有更多的数据可用。

最新更新