我在这里找到了一个代码 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/