2016-06-08 35 views
2

我對節點的fs模塊中的readStream有一個簡單的問題。 下面是簡單的代碼:CreateReadStream在塊中創建額外的換行符分隔符?

fs = require('fs'); 
readStream = fs.createReadStream('somefile.d'); 
readStream.on('data', function(chunk) { 
console.log(chunk.toString()); 
}); 

'somefile.d' 是:

a1 
a2 
a3 
a4 

問題: 爲什麼會出現在輸出的末尾額外的換行符?我嘗試了一個od -c來獲得一個八進制轉儲,是的,還有一個額外的換行符。這是由toString放? 更重要的是,爲什麼塊被換行符分隔了?每行都會觸發數據事件。我沒有指定任何選項,也沒有選項可讀取由任何特定字符分隔的塊。例如,我知道有carrier模塊來解決此問題。

任何解釋將不勝感激。



回答

4

不知道我完全理解,但如果你在談論該計劃的實際輸出,寫它看起來像你只輸出從console.log到來。 console.log以行結尾終止其寫入。如果你想寫入stdout沒有行結束符,你可以只是做:

process.stdout.write(chunk)

應該把他們送到了原樣。你也可以管readstream直接到標準輸出,如果你想:

readStream.pipe(process.stdout);

+0

這完全說明了第一部分。我接受你的答案,因爲我剛剛錯過了關於console.log最後發出換行符的那個簡單點。但是這並不能解釋爲什麼要閱讀塊,一次一行,我的意思是換行符分隔。在節點的流式傳輸模塊中沒有這樣的塊定義,沒有什麼可以指定不同的分隔符。在這種情況下,我瞭解在我的查詢中鏈接到的「運營商」模塊的實用性。請欣賞關於這一點的解釋... – Sam

+1

不,afaik大塊是一些字節數,沒有分隔。我對你沒有另外的解釋。 – Paul

+0

謝謝。我認爲如果沒有指定大小,它會大塊,直到它看到一個換行符。我猜... – Sam