# 引子
> 在編寫代碼時,我們應該有一些方法將程序像連接水管一樣連接起來 -- 當我們需要獲取一些數據時,可以去通過"擰"其他的部分來達到目的。這也應該是IO應有的方式。 --?[Doug McIlroy. October 11, 1964](http://cm.bell-labs.com/who/dmr/mdmpipe.html)
[](https://camo.githubusercontent.com/da881d7ab5e9ae8fdcd4f6a11a999a8040d00930/687474703a2f2f737562737461636b2e6e65742f696d616765732f6d63696c726f792e706e67)
從[早先的unix](http://www.youtube.com/watch?v=tc4ROCJYbm0)開始,stream便開始進入了人們的視野,在過去的幾十年的時間里,它被證明是一種可依賴的編程方式,它可以將一個大型的系統拆成一些很小的部分,并且讓這些部分之間完美地進行合作。在unix中,我們可以使用`|`符號來實現流。在node中,node內置的[stream模塊](http://nodejs.org/docs/latest/api/stream.html)已經被多個核心模塊使用,同時也可以被用戶自定義的模塊使用。和unix類似,node中的流模塊的基本操作符叫做`.pipe()`,同時你也可以使用一個后壓機制來應對那些對數據消耗較慢的對象。
在node中,流可以幫助我們將事情的重點分為幾份,因為使用流可以幫助我們將實現接口的部分分割成一些連續的接口,這些接口都是可重用的。接著,你可以將一個流的輸出口接到另一個流的輸入口,然后使用使用一些庫來對流實現高級別的控制。
對于小型程序設計(small-program design)以及unix哲學來說,流都是一個重要的組成部分,但是除此之外還有一些重要的事情值得我們思考。永遠要記得:十鳥在森林不如一鳥在手里。
[](https://camo.githubusercontent.com/2b96521b7dab80dc7b850c7e5c2aea752bdf874d/687474703a2f2f737562737461636b2e6e65742f696d616765732f6b65726e696768616e2e706e67)