stream读取(0)指令
有一个代码,我在这里findhttps://github.com/substack/stream-handbook从stream读取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)
东西? 是不是stream有一个缓冲区,其余的数据被存储,直到我请求.read(size)
? 但没有.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>
不pipe我将使用.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); } });
您可以更改块的大小,通过睡眠或没有它的input…