Node.js 自定义流
2018-02-16 19:15 更新
要创建我们自己的流,继承流类,并实现下表中列出的几个基本方法。
用例 | 类 | 实施方法 |
---|---|---|
只读 | 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.w3cschool.cn */
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);
以上内容是否对您有帮助:
更多建议: