Nodejs中的流

來源:互聯網
上載者:User

標籤:des   http   io   os   使用   for   strong   檔案   資料   

Nodejs中的很多地方都用到了流,流是一個很常見的概念,一個http請求,控制台輸入輸出的形式都是流。流可以分為三種:

  1. 可讀流
  2. 可寫流
  3. 既能讀又能寫

其中第三種流又可以分為全雙工系統流Duplex和轉換流Transform,另外,所有的流都是EventEmitter的執行個體,也就是有發送事件和處理事件的能力。

可讀流 Readable Stream

可讀流可以輸出資料,常見的可讀流有:

  • http請求和響應
  • 讀檔案
  • 壓縮解壓
  • 加密解密
  • tcp sockect
  • 進程輸入

可讀流分為兩種模式:流式的和非流式的,區別就是前者會儘快保證資料可用,而後者則是只有等到你主動調用stream.read()之後才可用。

剛才說過,所有的流都是EventEmitter的執行個體,它本身也有一些內建的事件,ReadableStream有的事件包括:

  • readable: 流中的資料已經準備就緒
  • data: 有資料到來,對應flowing模式
  • end: 沒有更多的資料了
  • close: 有關的資源如檔案描述符被關閉時觸發
  • error: 接收資料時發生錯誤

另外還有一些方法介面:

  • read([size]): 主動的拉取一定的資料,如果沒有資料,則返回null,如果size不傳,則返回所有可用的資料。該方法只能在non-flowing模式下調用
  • setEncoding(encoding): 使用什麼樣的編碼格式進行解析
  • pause(): 停止發送data事件,新來的資料會保留到內部的buffer中
  • resume(): 對應上個事件,恢複data事件的發送
  • pipe(destination, [option]): 從流中拉取資料,並寫入到destination流中,因為返回的是destination流,因此可以使用鏈式操作;預設情況下,讀取流關閉後寫入流也被關閉
  • unpipe([destination]): 將pipe方法設定的寫入規則移除掉,如果不傳入destination,則移除所有的流
  • unshift(chunk): 可以想象為把吐出來的東西再吃進去,這裡就是把讀取出來的部分或全部內容再次放到可讀流中
  • wrap(stream): 對老式的流進行封裝
可寫流 Writable Stream

同樣的,可寫流有事件和方法兩部分,事件包括:

  • drain: 表明資料還沒有寫完,write方法調用返回false
  • finish: 所有的資料都寫入完畢
  • pipe: 當一個讀取流調用pipe方法指向當前寫入流
  • unpipe: 當一個讀取流調用unpipe方法將當前寫入流撤銷時
  • error: 寫入出現錯誤時

方法:

  • write(chunk,[encoding],[callback]): 寫入資料,當資料必須要在內部被緩衝時,返回false
  • end([chunk],[encoding],[callback]): 寫完之後就終止新的寫入了
可讀寫流

Duplex: 全雙工系統的流,可讀可寫

Transform: 從input中讀取流資料,進行處理後寫入到output流中

 

Nodejs中的流

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.