异步读取n个字节

时间:2014-12-18 10:05:00

标签: javascript node.js asynchronous stream

我正在研究node.js项目。是否可以从流中异步读取n个字节?

通常,如果我想异步读取流,我会使用事件。问题是我需要异步处理流的其余部分。

如果我监听data事件,我可以稍后使用流的其余部分,但我无法一次控制我想要读取的字节数。我尝试使用unshift将未使用的字节放回缓冲区,但是当稍后添加另一个侦听器时,这似乎不会触发data事件。

This question类似,但唯一的答案是同步解决方案。

是否可以选择限制传递给data事件侦听器的字节数?是否有可能以某种方式将字节推回到流中并仍然可以通过事件访问它们?

1 个答案:

答案 0 :(得分:1)

只要您正在侦听readable事件并且没有阻止外观调用stream.read(n);,那么该解决方案就是异步的。像下面这样的东西(未经测试!)可以得到你想要的东西。

function streamChunk(stream, size, dataCallback, doneCallback) {
  function getChunk() {
    var data = stream.read(size);
    if(data != null) {
      dataCallback(data);
      setImmediate(getChunk);
    }
  }

  stream.on('readable', getChunk);
  stream.on('end', doneCallback);  
}