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)方法显示什么,但恕我直言,这是正确的方法&#xFF1A;

 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…