Node.js流实战:可读流与可写流操作解析

1 下载量 136 浏览量 更新于2024-08-29 收藏 74KB PDF 举报
"本文深入探讨了Node.js中的stream流,特别是可读流和可写流的实现和使用,包括四种基本流类型、数据模式、可读流的两种操作模式以及如何创建并监听可读流事件。" 在Node.js中,stream流是一个强大的工具,它允许开发者高效地处理大体积数据,而无需一次性加载到内存中。流可以是可读、可写、可读可写(Duplex)或可转换(Transform),分别对应于不同的API如`fs.createWriteStream()`和`fs.createReadStream()`。 1. **可写流(Writable Stream)** 可写流用于将数据写入目标,例如文件系统、网络连接等。`fs.createWriteStream()`用于创建文件系统的写入流,它接收一个配置对象,如文件名、编码、权限等。数据写入时,可以通过监听`'data'`事件或者使用`write()`方法。 2. **可读流(Readable Stream)** 可读流则用于从源获取数据,如读取文件或接收HTTP请求。`fs.createReadStream()`用于创建文件系统的读取流。数据可以以二进制模式(Buffer或字符串)或对象模式传输。可读流默认处于暂停模式,需通过`'data'`事件回调、`resume()`方法或`pipe()`方法将其切换至流动模式。 3. ** Duplex和Transform流** Duplex流同时具备读写能力,例如`net.Socket`。Transform流则是在读写过程中对数据进行转换,如`zlib.createDeflate()`用于压缩数据。 4. **数据模式** 数据模式分为二进制和对象模式。二进制模式处理Buffer和字符串,对象模式则处理普通JavaScript对象。 5. **可读流的模式管理** 可读流有流动和暂停两种模式。流动模式下,数据自动读取并通过事件提供给应用;暂停模式下,需要手动调用`read()`来获取数据。通过添加`'data'`事件处理器、调用`resume()`或`pipe()`可以进入流动模式,而`pause()`和`unpipe()`用于返回暂停模式。 6. **创建和监听可读流事件** 创建可读流如`fs.createReadStream()`后,可以监听 `'data'`, `'end'`, `'error'`等事件来处理数据、检测流的结束或处理错误。例如: ```javascript const fs = require('fs'); const readStream = fs.createReadStream('./1.txt', { encoding: 'utf8' }); readStream.on('data', (chunk) => { console.log(chunk); }).on('end', () => { console.log('文件读取完毕'); }).on('error', (err) => { console.error('读取文件时出错:', err); }); ``` 理解并掌握Node.js中的stream流对于高效处理大量数据至关重要。通过正确使用这些流,开发者可以构建出高性能、低内存占用的应用程序。