实现node.js里面的可写流主要在于俩个点
1:有一个缓冲区,用于对没有来得及写入的数据进行缓存
2:有一个字段用来标记当前是否为写入状态。
在代码体现为, this.buffer一个数组用来保存缓冲区里面的值,this.writing表示当前是否为写入状态true表示正在写入
思路,我们调用write方法,读入数据时对当前状态进行判断,如果writing为false,那么置为true 调用fs.write方法去写入文件里面
在此期间,读入的其他字符会保存在缓冲区里面。每一写完一次数据,我们就会去检测缓冲区里面是否存在值,如果有,那么就去写入。此外,当缓冲区里的大小大于this.highWaterMark时,那么就需要return false, 不要在读了。
来实现看看把
const fs = require("fs");
const EventEmitter = require("events");
class WriteStream extends EventEmitter {
constructor (path, options) {
super(path, options);
this.path = path;
this.flags = options.flags || "w";
this.mode = options.mode || 0o666;
this.highWaterMark = options.highWaterMark || 16 * 2024;
this.encoding = options.encoding || "utf8"