上一节,我们实现了一个可写流可写流
那么我们这一节实现一个可读流的(流动模式)。nodeJs有俩种模式的可读流,一种是暂停模式,一种是流动模式。
什么是流动模式了?监听data事件,调用resume()方法,使用Pipe()都是流动模式,流动模式就是说数据是不会经过缓冲区的,像水流一样,只要打开就不停的往下面流。暂停模式就像你用吸管吸一样,你像要多少数据,你就吸多少。
流动模式的实现比较简单,就是利用fs.read方法,每一次去读取数据,然后判断是否读取完了,否者就继续读。
const EventEmitter = require("events");
const fs = require("fs");
class ReadStream extends EventEmitter {
constructor(path, options) {
super();
this.path = path;
this.flags = options.flags || "r";
this.mode = options.mode || 0o666;
this.highWaterMark = options.highWaterMark || 16 * 2024;
this.encoding = options.encoding || "utf8";
this.start = options.start