![](/img/trans.png)
[英]Node's process.stdin readable stream logs Null when read inside a readable event listener callback
[英]What are the differences between readable and data event of process.stdin stream?
說我有
process.stdin.setEncoding('utf8');
var myString = '';
有什么區別
process.stdin.on('readable', function() {
myString += process.stdin.read();
});
和
process.stdin.on('data', function(chunk) {
myString += chunk;
});
如果stdin結束后輸入字符串相同,它們會給我相同的myString
每種方法的最佳做法是什么? 謝謝
它們是兩個不同的API,允許您訪問相同的數據塊流。 'readable'
API在節點0.10.0中作為“Streams 2”的一部分引入,因此如果您搜索它,它應該會有所幫助。 該問題的核心是'readable'
界面允許更簡單的數據管理和緩沖。
'data'
示例用一個塊調用你的函數,你別無選擇,只能處理它,否則它將永遠丟失。 在'readable'
示例中,該函數告訴您數據可用,但您可以隨時閱讀。 這允許底層系統知道您是否已處理數據,因此支持稱為背壓的概念非常簡單。
例如,在網絡流中,如果客戶端通過TCP連接向服務器發送數據並且服務器超級忙,它將接收readable
事件,但是它可以選擇等待讀取數據,直到它實際擁有資源為止。處理數據。 通過不讀取數據,流將緩沖它,並且當緩沖區接近最大大小時,流將停止從操作系統讀取數據包以避免占用太多RAM。 然后操作系統將開始丟棄數據包,並且由於數據包被丟棄,發送數據的客戶端將降低發送數據的速度以嘗試減少數據包丟失。
舊的流“V1”實現在技術上支持這一點,但這樣做要困難得多。
所以基本上,如果你期望大量的數據,使用“可讀”或設計你的流是一個非常好的主意,但如果你只是從終端讀取數據,那么你很可能會看到零差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.