pipe
是什么
pipe的本质:是对on('data') write() end() close 的封装
做什么
- 监听可读流的触发事件,将获取到的数据 读取一点 写入一点,写入到可写流中
- 如果ws.write(data)返回false 则暂停读取,读取完毕后 触发drain事件,再继续读取,直到最终读取完毕,
- 如果需要操作读取到的数据,需要 使用 on('data)
实现
- 在node可读流实现的基础上实现pipe
//可读流的class里直接新增pipe 方法
pipe(ws) {
// 谁调用 指向谁(实例)
this.on("data", (data) => {
let flag = ws.write(data);
if (!flag) {
//读取数量 超过highWaterMark 暂停
this.pause();
}
});
ws.on("drain", () => {
// 缓存区 清空后 继续 读取文件
this.resume();
});
}
调用
- 经历了可写流和可读流的手写,pipe 是有一丢丢简单了
const bPath = path.join(__dirname, "b.txt");
const aPath = path.join(__dirname, "a.txt");
const createWriteStream = require("./initWriteStream");
const createReadStream = require("./initReadStream");
rs.pipe(ws);
最后如果觉得本文有帮助 记得点赞三连哦 十分感谢