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); 


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号