Node.js stream read.read重复调用

时间:2014-07-01 10:42:44

标签: javascript node.js

Brad实际上已经提出了这个问题,但我还没有找到真正回答的问题。必须重复调用可读事件处理程序中的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()所必需的?

2 个答案:

答案 0 :(得分:1)

首先,如果read永远不会返回null,这将导致服务器阻塞:

  while (null !== (chunk = readable.read())) {
    console.log('got %d bytes of data', chunk.length);
  }

除非您指定尺寸参数,否则您每次只需要阅读一次“可读”字样。事件被解雇了。如果您指定了尺寸,并且尺寸小于要读取的数据总量,那么您必须多次调用它。

您有readable.on('end', ...可以让您知道何时没有更多数据可用。

答案 1 :(得分:0)

在对象模式下,.read()仅返回一个对象,因此这是必要的。我不确定这对于二进制流是否有必要,但我已经成功地仅在每个.read()事件中调用readable一次。