NodeJS中的Stream:读写文件的高效工具
37 浏览量
更新于2024-09-01
收藏 79KB PDF 举报
"本文主要介绍NodeJS中Stream的基本使用,特别是可读流的创建和流动状态,以及如何监听数据和结束事件。"
在NodeJS中,处理文件操作时,核心模块`fs`提供了多种API,包括`createReadStream`和`createWriteStream`,用于创建可读流和可写流,以便高效地处理大文件或内存不确定的情况。这些流接口避免了一次性加载整个文件到内存,从而减少了内存压力。
### 可读流
#### 创建可读流
使用`fs.createReadStream()`方法创建可读流。该方法接收两个参数:文件路径和一个包含选项的对象。其中,`start`和`end`分别指定了读取的起始和结束位置,`highWaterMark`定义了缓存区的大小,它影响了数据读取的频率。例如:
```javascript
let fs = require("fs");
let rs = fs.createReadStream("1.txt", {
start: 0,
end: 3,
highWaterMark: 2
});
```
#### 流动状态
可读流有两种状态:暂停和流动。在流动状态下,数据会根据`highWaterMark`设定的值持续读取并触发"data"事件,直到文件读取完毕。例如:
```javascript
rs.on("data", data => {
console.log(data);
});
rs.on("end", () => {
// 文件读取结束后的操作
});
```
当`data`事件被触发时,每次都会提供一定量的数据,通常是`highWaterMark`设定的值。当没有更多的数据可读时,会触发`end`事件。
### 监听事件
除了"data"和"end"事件,还有其他一些重要的事件:
- `error`:当发生错误时触发,如文件不存在或读取权限问题。
- `close`:流关闭时触发,通常在所有数据处理完成后关闭流。
- `open`:文件打开成功时触发,这发生在流开始读取之前。
### 数据处理
在流动模式下,数据会自动读取,如果不希望立即处理所有数据,可以使用`pause()`方法暂停流,使用`resume()`方法恢复读取。另外,`destroy()`方法可以立即终止流并清理资源。
### 可写流
与可读流类似,`createWriteStream`用于创建可写流。数据通过`write()`方法写入,当写入完成且缓冲区清空时,会触发`finish`事件。如果需要确保所有数据都已写入磁盘,可以在`finish`事件后进行后续操作。
NodeJS中的Stream机制是处理大量数据的关键工具,它可以有效地管理内存和提高程序性能。理解和熟练使用Stream对于编写高效的NodeJS应用至关重要。
106 浏览量
290 浏览量
756 浏览量
346 浏览量
418 浏览量
516 浏览量
2025-03-12 上传
280 浏览量
130 浏览量

weixin_38538585
- 粉丝: 3
最新资源
- Tailwind CSS多列实用插件:无需配置的快速多列布局解决方案
- C#与SQL打造高效学生成绩管理解决方案
- WPF中绘制非动态箭头线的代码实现
- asmCrashReport:为MinGW 32和macOS构建实现堆栈跟踪捕获
- 掌握Google发布商代码(GPT):实用代码示例解析
- 实现Zsh语法高亮功能,媲美Fishshell体验
- HDDREG最终版:DOS启动修复硬盘坏道利器
- 提升Android WebView性能:集成TBS X5内核应对H5活动界面问题
- VB银行代扣代发系统源码及毕设资源包
- Svelte 3结合POI和Prettier打造高效Web开发起动器
- Windows 7下VS2008试用版升级至正式版的补丁程序
- 51单片机交通灯系统完整设计资料
- 兼容各大浏览器的jquery弹出登录窗口插件
- 探索CCD总线:CCDBusTransceiver开发板不依赖CDP68HC68S1芯片
- Linux下的VimdiffGit合并工具改进版
- 详解SHA1数字签名算法的实现过程