>[success] # stream
1. 關于`stream流`的解釋,理解為水流,就像水一樣會從一個地方流到另一個地方,程序中的數據也**會按照一定的規則從一個地方“流”到另一個地方**。在程序中,**流**可以用來**讀寫文件和網絡數據**等,流的**優點是可以處理大量的數據,而不需要一次性將所有數據讀入內存,這提高了程序的效率和資源利用率**。也就是說,流處理的數據就像水一樣,可以流動,**可以分成一塊一塊來**,可以在不同設備之間流動,可以通過程序進行操作和處理,例如:**讀取文件的二進制(字節)數據會源源不斷的被讀取到我們程序**
2. `Node.js`也支持流式傳輸,允許數據被分成小塊進行處理,而不是一次性讀取整個文件或數據流。流的特點流**是可讀的,也是可寫的**
3. `Node.js` 類型對照表
| 類型 | 描述 | 示例 | API |
| --- | --- | --- | --- |
| 可讀流(Readable) | 用于讀取數據的流式接口 | 從文件讀取數據、處理 http 請求時獲取請求 body 等 | fs.createReadStream(), http.IncomingMessage |
| 可寫流(Writable) | 用于寫入數據的流式接口 | 將數據寫入文件、處理 http 響應時寫入響應 body 等 | fs.createWriteStream(), http.ServerResponse |
| 雙向流(Duplex) | 既可讀又可寫的流 | 像一個 TCP 套接字 | net.Socket, tls.TLSSocket |
| 轉換流(Transform) | 在讀寫過程中可以對數據進行修改的流 | zlib 的壓縮和解壓縮流等 | zlib.createGzip(), zlib.createGunzip() |
>[danger] ##### 優缺點
* **使用Node.js中的Stream有以下幾點優勢**:
1. 內存占用少:Stream會分塊傳輸數據,不會一次性將所有數據讀取到內存中,減少了內存占用。
2. 效率高:Stream使用事件驅動,能夠在數據處理過程中實現高效的數據傳輸和處理,提高了數據處理和傳輸的效率。
3. 可以進行數據轉換:Stream提供了轉換流的功能,可以在流程中對數據進行轉換,如壓縮、解壓縮等操作。
4. 可靠性高:Stream可以處理大量的數據,而且在數據傳輸過程中,可以對錯誤進行處理,保證了數據傳輸的可靠性。
* **使用Node.js中的Stream的缺點如下**:
1. 復雜性高:因為Stream需要處理的是流數據,所以使用時需要具備一定的數據處理和操作技能,學習成本相對較高。
2. 容易出錯:因為Stream處理數據的過程比較復雜,所以容易出現一些意料之外的錯誤。
3. 不適用于所有場景:Stream適用于流數據的處理和傳輸場景,如果是處理一些靜態的文件數據,Stream的優勢就不太明顯了。
- 基礎
- 什么是Node.js
- 理解 I/O 模型
- 理解node 中 I/O
- 對比node 和java 使用場景
- node 模塊管理
- 內置模塊 -- buffer
- 內置模塊 -- fs
- fs -- 文件描述符
- fs -- 打開文件 api
- fs -- 文件讀取 api
- fs -- 文件寫入 api
- fs -- 創建目錄 api
- fs -- 讀取文件目錄結構 api
- fs -- 文件狀態(信息) api
- fs -- 刪除文件/目錄 api
- fs -- 重命名 api
- fs -- 復制文件 api
- 內置模塊 -- events
- 內置模塊 -- stream
- 可讀流 -- Readable
- 可寫流 -- Writable
- Duplex
- Transform
- 內置模塊 -- http
- http -- 從客戶端發起
- http -- 從服務端發起
- 內置模塊 -- url
- 網絡開發