node.js內置模塊之---stream 模塊

stream?模塊的作用

在 Node.js 中,stream 模塊是一個用于處理流(stream)的核心模塊。流是一種處理數據的抽象方式,允許程序處理大量數據時不會一次性將所有數據加載到內存中,從而提高性能和內存效率。通過流,Node.js 可以以分塊的方式讀取和寫入數據,這對于處理大文件或實時數據流(如音視頻流、網絡請求等)非常有效。

流可以分為以下幾種類型:

  1. Readable Streams:可讀流,允許從某個數據源中讀取數據(例如,文件、HTTP 響應、標準輸入等)。
  2. Writable Streams:可寫流,允許將數據寫入某個目標(例如,文件、HTTP 請求、標準輸出等)。
  3. Duplex Streams:雙工流,既可以讀也可以寫(例如,網絡通信中的 TCP 套接字)。
  4. Transform Streams:轉換流,既可以讀也可以寫,但在讀取數據時,會在讀取的數據上執行一些轉換操作(例如,壓縮、加密、解密等)。

核心功能和概念

  1. 數據流的處理方式:

    • 流是按塊(chunk)進行傳輸的,避免了將所有數據一次性加載到內存中的問題。這使得在處理大數據時,程序能夠以非常高效的方式進行工作。
    • 流會自動地分配緩沖區,這些緩沖區的大小可以根據需求進行調節。
  2. 事件驅動:

    • 流是基于事件驅動的。當數據可用時,會觸發事件。常見的事件有?dataenderror?和?finish?等。
  3. 管道操作:

    • Node.js 的?stream?模塊支持管道(pipe)操作。你可以將一個流的輸出連接到另一個流的輸入,這樣數據就能自動從一個流傳輸到另一個流,而不需要手動處理每個數據塊。
    • stream.pipe()?是常用的流連接方法。

stream?模塊相關的API

1、Readable Stream(可讀流)
  • 用途:用于從數據源中讀取數據。
  • 常見使用場景:讀取文件、HTTP 請求響應、標準輸入等。
const fs = require('fs');
const readableStream = fs.createReadStream('example.txt', { encoding: 'utf8' });readableStream.on('data', (chunk) => {console.log('Received chunk:', chunk);
});readableStream.on('end', () => {console.log('No more data.');
});readableStream.on('error', (err) => {console.error('Error:', err);
});

當讀取一個文件時,打印的格式是以下這樣的

2、Writable Stream(可寫流)
  • 用途:用于向某個目標寫入數據。
  • 常見使用場景:寫入文件、HTTP 請求的響應、標準輸出等。
const fs = require('fs');
const writableStream = fs.createWriteStream('output.txt');writableStream.write('Hello, world!\n');
writableStream.end(); // 完成寫入writableStream.on('finish', () => {console.log('Writing completed!');
});writableStream.on('error', (err) => {console.error('Error:', err);
});
3、Duplex Stream(雙工流)
  • 用途:可以同時讀取和寫入的流。
  • 常見使用場景:例如,網絡通信中的 TCP 套接字。
const { Duplex } = require('stream');const duplexStream = new Duplex({read(size) {this.push('data from read\n');this.push(null); // 結束流},write(chunk, encoding, callback) {console.log('Received chunk:', chunk.toString());callback();}
});duplexStream.write('Hello, Duplex stream!\n');
duplexStream.pipe(process.stdout);
4、Transform Stream(轉換流)
  • 用途:用于在讀取數據時,對數據進行某種轉換(例如,壓縮、解密等)。
  • 常見使用場景:壓縮文件、數據加密等。
const { Transform } = require('stream');const transformStream = new Transform({transform(chunk, encoding, callback) {this.push(chunk.toString().toUpperCase()); // 轉換成大寫callback();}
});process.stdin.pipe(transformStream).pipe(process.stdout);

主要方法和事件

常用方法:
  • stream.read([size]):從流中讀取數據,size?參數控制每次讀取的字節數。
  • stream.write(chunk[, encoding][, callback]):向流中寫入數據。
  • stream.end([chunk][, encoding][, callback]):標記流的結束,通常在寫入完畢后調用。
  • stream.pipe(destination):將當前流的輸出傳遞到目標流(即另一個流)。
常用事件:
  • 'data':當可讀取的數據時觸發。
  • 'end':數據讀取完畢時觸發(在可讀流中)。
  • 'finish':數據寫入完畢時觸發(在可寫流中)。
  • 'error':流操作中發生錯誤時觸發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65211.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65211.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65211.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手持PDA終端,提升零售門店管理效率

隨著科技的不斷進步和零售行業的持續發展,手持PDA終端的應用將會越來越廣泛。它將不斷融合更多先進的技術和功能,為零售門店管理帶來更加便捷、高效、智能的解決方案。 手持PDA終端是集成了數據處理、條碼掃描、無線通信等多種功能于一體的便攜式設備?…

LeetCode -Hot100 - 53. 最大子數組和

前言 本專欄主要通過“LeetCode 熱題100”,來撿起自己本科階段的算法知識與技巧。語言主要使用c/java。如果同樣正在練習LeetCode 熱題100的朋友歡迎關注或訂閱本專欄。有疑問歡迎留言交流~ 題目描述 題目鏈接 示例 1: 輸入:nums [-2,1…

【51單片機-零基礎chapter1】

安裝軟件(配套的有,不多贅述) 1.管理員身份運行keil和破解軟件kegen 將CID代碼復制粘貼到 一定要管理員方式,不然會error 插入板子 我的電腦,管理 1.如果是拯救者,查看端口,如果沒有則顯示隱藏 2.蘋果不知道,好像不可以 3.其他電腦在"其他設備找" (注:本人在校已…

Go語言的 的設計模式(Design Patterns)基礎知識

Go語言的設計模式基礎知識 引言 設計模式是一種在軟件開發中經常使用的解決特定問題的通用方案。它們為開發者提供了一種有效的方式來組織代碼、提高代碼的可復用性、可維護性和靈活性。在眾多編程語言中,Go語言因其獨特的特性,如并發支持和簡潔的語法…

使用JMeter玩轉tidb壓測

作者: du拉松 原文來源: https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql協議的,所以在使用過程中使用tidb的相關工具連接即可。因為jmeter是java開發的相關工具,直接使用mysql的jdbc驅動包即可。 二、linux下安裝jmet…

C# 設計模式(結構型模式):外觀模式

C# 設計模式(結構型模式):外觀模式 (Facade Pattern) 在復雜系統中,往往會涉及到多個子系統、模塊和類。這些子系統的接口和功能可能會讓使用者感到困惑和復雜。在這種情況下,我們可以使用外觀模式(Facade…

計算機網絡常見面試題及解答

以下是計算機網絡中常見的面試題及解答,按主題分類: --- ## **一、基礎概念** ### **1. OSI 七層模型和 TCP/IP 模型的區別是什么?** **答:** - **OSI 七層模型:** - 應用層、表示層、會話層、傳輸層、網絡層、數…

Win11+WLS Ubuntu 鴻蒙開發環境搭建(一)

參考文章 Windows11安裝linux子系統 WSL子系統遷移、備份與導入全攻略 如何擴展 WSL 2 虛擬硬盤的大小 Win10安裝的WSL子系統占用磁盤空間過大如何釋放 《Ubuntu — 調整文件系統大小命令resize2fs》 penHarmony南向開發筆記(一)開發環境搭建 一&a…

微信小程序提示 miniprogram-recycle-view 引入失敗

npm i --save miniprogram-recycle-view 安裝需要使用的頁面的json文件中配置 {"usingComponents": {"recycle-view": "miniprogram-recycle-view/recycle-view","recycle-item": "miniprogram-recycle-view/recycle-item"…

基于深度學習算法的AI圖像視覺檢測

基于人工智能和深度學習方法的現代計算機視覺技術在過去10年里取得了顯著進展。如今,它被廣泛用于圖像分類、人臉識別、圖像中物體的識別等。那么什么是深度學習?深度學習是如何應用在視覺檢測上的呢? 什么是深度學習? 深度學習是…

Go語言的 的基本數據類型(Primitive Data Types)核心知識

Go語言的基本數據類型(Primitive Data Types)核心知識 Go語言(又稱Golang)是一種開源編程語言,由Google設計并開發。它以高效、簡潔和強大的并發支持著稱。Go語言支持多種數據類型,其中基本數據類型是構建…

ElasticSearch基礎-文章目錄

ElasticSearch學習總結1(環境安裝) ElasticSearch學習總結2(基礎查詢) ElasticSearch學習總結3(.NetCore操作ES) ElasticSearch學習總結4(sql操作ES) ElasticSearch學習總結5&am…

使用 Docker 查看 Elasticsearch 錯誤日志

在使用 Elasticsearch(簡稱 ES)的過程中,我們可能會遇到各種問題。為了快速定位和解決這些問題,查看錯誤日志是關鍵。本文將介紹如何使用 Docker 查看 Elasticsearch 的錯誤日志,并提供一些實用技巧。 1. 安裝 Docker…

HuatuoGPT-o1:基于40K可驗證醫學問題的兩階段復雜推理增強框架,通過驗證器引導和強化學習提升醫學模型的推理能力

HuatuoGPT-o1:基于40K可驗證醫學問題的兩階段復雜推理增強框架,通過驗證器引導和強化學習提升醫學模型的推理能力 論文大綱理解1. 確認目標2. 分析過程3. 實現步驟4. 效果展示 解法拆解全流程提問倆階段詳細分析 論文:HuatuoGPT-o1, Towards …

量子機器學習:當量子計算遇上人工智能,顛覆即將來臨?

在當今科技飛速發展的時代,量子計算與人工智能宛如兩顆璀璨的星辰,各自在不同的蒼穹閃耀,正以前所未有的速度重塑著世界的面貌。當這兩大前沿領域相互碰撞、深度融合,量子機器學習應運而生,猶如一場科技風暴在學界與產…

硬件基礎知識筆記(2)——二級管、三極管、MOS管

Part 2 二級管、三極管、MOS管 1、二級管1.1肖特基二極管和硅二極管選型比較1.2到底是什么決定了二極管的最高工作頻率?1.3二極管結電容和反向恢復時間都是怎么來的1.4肖特基二極管的工作原理1.5為什么要用肖特基二極管續流? 2、三極管2.1三極管工作原理…

vue3-dom-diff算法

vue3diff算法 什么是vue3diff算法 Vue3中的diff算法是一種用于比較虛擬DOM樹之間差異的算法,其目的是為了高效地更新真實DOM,減少不必要的重渲染 主要過程 整個過程主要分為以下五步 前置預處理后置預處理僅處理新增僅處理后置處理包含新增、卸載、…

Dell服務器升級ubuntu 22.04失敗解決

ubuntu系統原版本20.04,服務器dell T40. 執行apt update后,再執行apt upgrade。 apt update執行成功,但apt upgrade執行中斷,提示如下: Checking package manager Reading package lists... Done Building dependen…

【C++】B2093 查找特定的值

博客主頁: [小????????] 本文專欄: C 文章目錄 💯前言💯題目描述輸入格式輸出格式輸入輸出示例 💯題目分析與解題思路💯代碼實現與對比分析我的實現代碼老師的實現代碼詳細對比與分析1. 數組的定義方式2. …

計算機網絡:網絡層知識點及習題(一)

網課資源: 湖科大教書匠 1、概述 網絡層實現主機到主機的傳輸,主要有分組轉發和路由選擇兩大功能 路由選擇處理機得出路由表,路由表再生成轉發表,從而實現分組從不同的端口轉發 網絡層向上層提供的兩種服務:面向連接…