2014-02-17 43 views
3

當我在Node.js中做fs.createReadStream時,數據似乎以64KB的塊(我假設這在計算機之間有所不同)。如果所有數據都適合單個塊,那麼使用流有什麼好處?

比方說,我通過一系列變革的管道讀取數據流(在一個單一的塊,每個操作),然後最後將其輸送至一個寫流保存到磁盤...

如果我事先知道我正在使用的文件保證每個文件小於64KB(即,它們將分別在單個塊中讀取),使用流有什麼好處,而不是普通的舊異步代碼?

回答

5

首先,您可以配置使用the highWaterMark parameter塊大小:默認爲16K對於字節模式流(用於對象模式流16級的對象),但fs.ReadStream默認爲64K塊(見relevant source code)。

如果您完全確定您的所有數據都適合在一個塊中,那麼使用流確實沒有直接的好處。

但請記住,流是靈活的;它們是代碼的統一抽象:您可以從文件,套接字或隨機生成器中讀取數據。您可以從流管道添加或刪除雙工流,並且您的代碼仍將以相同的方式工作。

你也可以管一個可讀的流爲多個可寫流,這將是一個痛苦只使用異步回調做...

還要注意,流不同步發出的數據(即發出的readable事件在下一個滴答),這很好地爲你處理同步調用異步回調的常見錯誤,從而創建一個可能的堆棧溢出錯誤。

+0

其他的一點是,雖然你的大塊是16k,64k或其他任何東西,流的接收者可能會更小 - 對他們來說,無論如何,這將是有益的。 – Zlatko

相關問題