Javascript 重复调用Node.js stream readable.read
这个问题实际上已经被问过了,但我发现这个问题还没有得到真正的回答。必须重复调用可读事件处理程序中的Javascript 重复调用Node.js stream readable.read,javascript,node.js,Javascript,Node.js,这个问题实际上已经被问过了,但我发现这个问题还没有得到真正的回答。必须重复调用可读事件处理程序中的readable.read()?在当前节点文档中,示例代码如下所示: var readable = getReadableStreamSomehow(); readable.on('readable', function() { var chunk; while (null !== (chunk = readable.read())) { console.log('got %d by
readable.read()
?在当前节点文档中,示例代码如下所示:
var readable = getReadableStreamSomehow();
readable.on('readable', function() {
var chunk;
while (null !== (chunk = readable.read())) {
console.log('got %d bytes of data', chunk.length);
}
});
readable.read()
被重复调用
文件中提到了这一事件:
一旦内部缓冲区耗尽,当更多数据可用时,将再次触发可读事件
它还谈到了read()
:
如果未指定size参数,则它将返回内部缓冲区中的所有数据
因此,是否存在将其放入while循环以重复调用
read()
所需的情况?首先,如果读取从未返回null,这将导致服务器阻塞:
while (null !== (chunk = readable.read())) {
console.log('got %d bytes of data', chunk.length);
}
除非指定size参数,否则每次触发“readable”事件时只需调用read一次。如果确实指定了一个大小,并且该大小小于要读取的数据总量,则必须根据需要多次调用它
您有
可读性。在('end',…
上,这将允许您知道何时没有更多数据可用。在对象模式下,.read()
只返回一个对象,因此这是必要的。我不确定这对于二进制流是否是必要的,但我只成功地调用了.read()
每个可读的
事件一次。那么我想文档中的示例是正确的。根据当时预期的v.10版本之前的一次谈话(),返回null是规范的一部分。readable事件只有在返回null后才会触发。这可能是文档使用while循环的原因。也许这就是为什么有必要这样做?因为如果直到它为空才读取,那么它还没有返回null。无论如何,文档肯定没有反映必须由readable返回null.read()在另一个Readable事件之前,仅当缓冲区为空时。