2014-11-04 39 views
1

有一個代碼,我在這裏找到https://github.com/substack/stream-handbook它從流中讀取3個字節。我不明白它是如何工作的。流讀取(0)指令

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)?但沒有.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)與否。我完全不理解這一點。這裏用什麼邏輯來打印這樣的結果?

回答

1

我不知道什麼的https://github.com/substack/stream-handbook正是筆者試圖用讀(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); 
    } 
}); 

您可以更改塊大小,通過輸入睡眠或沒有它...