Node.js Stream基础:创建可读流与数据流处理

1 下载量 25 浏览量 更新于2024-08-31 收藏 78KB PDF 举报
Node.js中的Stream是处理大量数据流的一种高效机制,特别适用于处理大文件或实时数据传输。在Node.js的文件系统操作中,标准库fs提供了一系列基本API,但当处理大文件时,逐块读写显得繁琐。为此,Node.js引入了可读流(Readable Stream)和可写流(Writable Stream),使得文件操作更加灵活和易于管理。 **可读流(Readable Stream)** 1. **createReadStream()方法**:这是创建可读流的关键函数,它接受两个参数。第一个参数是文件路径,用于指定要读取的文件;第二个参数是options对象,包含多个配置项: - `r`:表示二进制模式,通常无需设置,因为默认就是二进制模式。 - `null`:这里可能指的是`autoClose`,默认为`true`,表示在数据读取完成后自动关闭流。 - `null`:可能是指`fd`,表示文件描述符,一般不直接使用,可以通过`fs.open()`获取。 - `0o666`:权限位,十六进制表示,通常不需手动设置,由其他方式确定。 - `true`:`encoding`,通常默认为`null`,表示以Buffer形式读取,若需要文本格式,则可以设置为字符串。 - `64 * 1024`:`highWaterMark`,用于控制缓冲区大小,决定一次读取多少数据,值越大性能越好但内存占用越大。 创建可读流后,需要通过`data`事件监听器来接收读取的数据,例如: ```javascript let fs = require("fs"); let rs = fs.createReadStream("1.txt", { start: 0, end: 3, highWaterMark: 2 // 指定每次读取2个单位数据 }); rs.on("data", (data) => { console.log(data); // 输出读取到的数据 }); rs.on("end", () => { console.log("读完了"); // 文件读取完毕 }); ``` 在这个例子中,`data`事件会按设定的`highWaterMark`读取数据,直到文件结束。 **流动模式与暂停状态**: Node.js的可读流处于流动模式,这意味着数据会在数据事件触发时连续读取,直到文件结束。流动模式下的可读流没有暂停状态,如果需要控制读取速率,通常会配合`setInterval`或`setTimeout`使用。 总结来说,Node.js的Stream API通过可读流和可写流简化了大文件操作,通过事件驱动的方式实现异步读取和写入,提高程序的效率和响应能力。理解并熟练运用Stream,是高效开发Node.js应用的重要部分。