要创建我们自己的流,继承流类,并实现下表中列出的几个基本方法。
用例 | 类 | 实施方法 |
---|---|---|
只读 | Readable | _read |
只写 | Writable | _write |
读写 | Duplex | _read, _write |
操作被写入数据,然后读出结果 | Transform | _transform, _flush |
创建可读流
我们可以继承Readable类,在类中实现_read成员。
当有人请求读取数据时,流API调用该方法。
要传递数据,调用继承的成员函数 push
传入数据。
如果调用push(null),这表示读取流的结束。
以下代码显示如何创建可读流并返回1-10。
如果你运行这个,你会看到所有这些数字被打印。
var Readable = require("stream").Readable; var util = require("util"); /* www.w3cschool.cn */function Counter() { Readable.call(this); this._max = 10; this._index = 1; } util.inherits(Counter, Readable); Counter.prototype._read = function () { var i = this._index++; if (i > this._max) this.push(null); else { var str = " " + i; this.push(str); } }; // Usage, same as any other readable stream var counter = new Counter(); counter.pipe(process.stdout);
创建可写流
从Writable类继承并实现_write方法。
_write方法在需要处理作为其第一个参数的块中传递。
以下代码创建一个简单的可写流,将所有传入的数据记录到控制台。
var Writable = require("stream").Writable; var util = require("util"); /* www.ancii.com */function Logger() { Writable.call(this); } util.inherits(Logger, Writable); Logger.prototype._write = function (chunk) { console.log(chunk.toString()); }; // Usage, same as any other Writable stream var logger = new Logger(); var readStream = require("fs").createReadStream("log.txt"); readStream.pipe(logger);