node.js - 流读取(0)指令

标签 node.js stream

我在这里找到了一个代码 https://github.com/substack/stream-handbook从流中读取 3 个字节。而且我不明白它是如何工作的。

process.stdin.on('readable', function() {
    var buf = process.stdin.read(3);
    console.log(buf);
    process.stdin.read(0);
});

这样调用:

(echo abc; sleep 1; echo def; sleep 1; echo ghi) | node consume.js

它返回:

<Buffer 61 62 63>
<Buffer 0a 64 65>
<Buffer 66 0a 67>
<Buffer 68 69 0a>

首先,为什么我需要这个 .read(0) 东西?在我通过 .read(size) 请求之前,stream 是否有一个缓冲区存储其余数据?但是没有 .read(0) 它会打印

<Buffer 61 62 63>
<Buffer 0a 64 65>
<Buffer 66 0a 67>

为什么?

第二个是这些sleep 1 指令。如果我在没有它的情况下调用脚本

(echo abc; echo def; echo ghi) | node consume.js

它会打印

<Buffer 61 62 63>
<Buffer 0a 64 65>

不管我是否使用.read(0)。我完全不明白这一点。这里用什么逻辑打印出这样的结果?

最佳答案

我不确定 https://github.com/substack/stream-handbook 的作者到底是什么人|试图显示使用 read(0) 方法,但恕我直言,这是正确的方法:

process.stdin.on('readable', function () {
  let buf;
  // Every time when the stream becomes readable (it can happen many times), 
  // read all available data from it's internal buffer in chunks of any necessary size.
  while (null !== (buf = process.stdin.read(3))) {
    console.dir(buf);
  }
});

您可以更改 block 大小,通过 sleep 或不 sleep 传递输入...

关于node.js - 流读取(0)指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26729449/

相关文章:

javascript - 使用 Node.js 下载大文件的时间复杂度应该较低

node.js - 查询 Mongoose 子数组中的对象

javascript - Puppeteer - page.$$ ('' ).length 返回未定义

javascript - 请求 Stack Overflow API 返回奇怪的响应

c++ - 具有奇怪行为的结构 vector C++

java - RxJava : Split Rx Flowable into multiple streams

Java 字节流。读操作有时读不到写入的内容

javascript - 如何正确测试函数

Java,异常处理和使用 try、finally 关闭流

Ruby,合并惰性序列