codecamp

Node.js 自定义流

要创建我们自己的流,继承流类,并实现下表中列出的几个基本方法。

用例实施方法
只读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); 


Node.js 可读/可写流
Node.js HTTP
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }