对于大多数事情,你应该可以使用
src.pipe(dest);
如果您查看the source code for the Stream.prototype.pipe implementation,您会发现它只是一个非常方便的包装器,可以为您设置一切
对于我对流所做的所有工作,我通常只选择正确的流类型(Readable、Writable、Duplex、Transform 或 PassThrough),然后定义正确的方法(@ 987654329@、_write 和/或_transform) 在流上。最后,我使用.pipe 将所有内容连接在一起。
看到看起来是“圆形”的流设置是很常见的
client.pipe(encoder).pipe(server).pipe(decoder).pipe(client)
例如,这是我在 burro 模块中使用的流。您可以向此流写入对象,并且可以从中读取 JSON 字符串。
// burro/encoder.js
var stream = require("stream"),
util = require("util");
var Encoder = module.exports = function Encoder() {
stream.Transform.call(this, {objectMode: true});
};
util.inherits(Encoder, stream.Transform);
Encoder.prototype._transform = function _transform(obj, encoding, callback) {
this.push(JSON.stringify(obj));
callback(null);
};
作为一般建议,您几乎总是会这样编写您的 Streams。也就是说,您编写自己的“类”,它继承自内置流之一。直接使用内置流不太实用。
为了演示如何使用它,首先创建一个流的新实例
var encoder = new Encoder();
通过管道将编码器输出到标准输出来查看编码器的输出
encoder.pipe(process.stdout);
向其中写入一些示例对象
encoder.write({foo: "bar", a: "b"});
// '{"foo":"bar","a":"b"}'
encoder.write({hello: "world"});
// '{"hello":"world"}'