2013-08-07 49 views

回答

10

沒有,它們不相同。

push用於實現可讀流。它將數據推入讀取隊列,然後可以通過調用read()來讀取數據。如果它被調用爲null,那麼它將表示數據結束(EOF)。請參閱給出的說明:

注意:此函數應該由可讀實現器調用,而不是由可讀流消費者調用。

要實現一個流,某些方法必須由開發人員編寫,給定here

Use-case          Class  Method(s) to implement 
Reading only         Readable _read 
Writing only         Writable _write 
Reading and writing       Duplex  _read, _write 
Operate on written data, then read the result Transform _transform, _flush 

推必須只能用於能夠讀取的數據流(),即可讀雙工變換流。它只能在這些函數中使用_read,_transform或_flush。 PassThrough是Transform的一個實現。


write應該被可寫入流的用戶使用。

該方法將一些數據寫入底層系統,並在數據完全處理後調用 提供的回調函數。

如果您打算使用Writable流(寫入它)然後使用寫入。推並不是寫作的選擇。使用寫入PassThrough。

+0

感謝您的詳細解釋。我在推測測試中模擬流的行爲有點像實現流,這讓我感到困惑。只從'_read','_transform'或'_flush調用'push'是非常明確的。任何洞察到爲什麼'推'不是'_push'? – hurrymaplelad

+1

push不僅用於流中,還用於數組和隊列等低級對象(基於數組)。所以也許他們使用相同或者已經修改過。它依賴於它們在內部使用的緩衝區。 – user568109

+0

僅供參考,節點流文檔的鏈接「流實施者的API」已更改(實現者=>實施者,AmEng與BrEng)。正確的是[這裏](https://nodejs.org/api/stream.html#stream_api_for_stream_implementers) –

相關問題