Node.js 教程
Node.js 基础
Node.js 概述
Node.js 环境搭建
Node.js 基础语法
Node.js 模块
Node.js 异步编程
Node.js 核心模块
Node.js文件系统
Node.js路径模块(path)
Node.js的HTTP模块
Node.js的url模块
Node.js流模块(stream)
Node.js 常用工具与框架
npm 与包管理
Express 框架
数据库操作
Socket.io 与 WebSocket
Node.js 实战项目
Web 应用开发
API 开发
爬虫应用
自动化脚本
Node.js部署与优化
部署 Node.js 应用
Node.js性能优化
Node.js应用的安全性
Node.js 高级话题
Node.js中的设计模式
TypeScript 与 Node.js
GraphQL 与 API 开发
-
+
首页
Node.js流模块(stream)
### **Node.js 流模块(stream)** 流是 Node.js 中处理流式数据的强大工具,可用于高效地读取和写入数据,尤其是在处理大量数据时。 --- ### **1. 可读流(Readable Stream)** 可读流用于从源读取数据,如文件或网络请求。 #### **示例:异步读取文本文件内容** ```javascript const fs = require('fs'); const readline = require('readline'); const fileStream = fs.createReadStream('file.txt'); // 创建可读流 const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); rl.on('line', (line) => { console.log(`Line from file: ${line}`); }); rl.on('close', () => { console.log('File reading completed'); }); ``` #### **特点** - **事件驱动**:通过 `data`、`end` 和 `error` 等事件处理数据。 - **低内存使用**:无需一次性加载所有数据到内存,适合大文件处理。 --- ### **2. 可写流(Writable Stream)** 可写流用于将数据写入目标,如文件或网络响应。 #### **示例:将数据写入文件** ```javascript const fs = require('fs'); const writeStream = fs.createWriteStream('output.txt'); // 创建可写流 // 写入数据 writeStream.write('Hello, '); writeStream.write('World!\n'); writeStream.end('This is the end.'); // 监听事件 writeStream.on('finish', () => { console.log('All data written to file'); }); writeStream.on('error', (err) => { console.error('Error writing to file:', err); }); ``` #### **特点** - **流出模式**:支持水线位(highWaterMark)控制缓冲区大小。 - **回调函数**:`write` 方法的回调函数可通知写入完成。 --- ### **3. 双工流(Duplex Stream)** 双工流同时是可读和可写的,既可读取数据,也可写入数据。 #### **示例:使用 TCP Socket(双工流)** ```javascript const net = require('net'); // 创建 TCP 服务器(双工流) const server = net.createServer((socket) => { console.log('Client connected'); // 监听可读事件 socket.on('data', (data) => { console.log(`Received: ${data}`); socket.write(`Echo: ${data}`); // 写入响应 }); // 监听关闭事件 socket.on('end', () => { console.log('Client disconnected'); }); }); server.listen(3000, () => { console.log('Server is listening on port 3000'); }); ``` #### **特点** - **双向通信**:适合需要双方通信的场景,如 TCP/UDP 协议。 --- ### **4. 转换流(Transform Stream)** 转换流用于修改流中的数据,通常用于数据转换、编码或解码。 #### **示例:使用 zlib 模块压缩数据(转换流)** ```javascript const fs = require('fs'); const zlib = require('zlib'); // 创建可读流和可写流 const gzip = zlib.createGzip(); // 创建转换流 const input = fs.createReadStream('input.txt'); const output = fs.createWriteStream('input.txt.gz'); // 将可读流、转换流和可写流连接 input.pipe(gzip).pipe(output); // 监听完成事件 output.on('finish', () => { console.log('File compressed successfully'); }); ``` #### **特点** - **数据转换**:在数据传输过程中实时转换。 - **链式操作**:多个转换流可以用 `pipe` 方法连接起来。 ### **总结** - **可读流** 用于从源读取数据。 - **可写流** 用于将数据写入目标。 - **双工流** 同时具有可读和可写流的功能。 - **转换流** 用于在传输过程中处理和转换数据。 流模块在处理大量数据时提供了高效的内存管理和性能优化,是 Node.js 中处理 I/O 操作的核心工具之一。
wwbang
2025年2月26日 18:12
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码