Node.js有不同的选项来使用数据。流0,1,2,3等等.
我的问题是这些不同选项在现实生活中的应用。我相当理解可读的/read、数据事件和管道之间的区别,但对选择特定的方法并不很有信心。
例如,如果我想使用流控制,可以使用一些手动阅读以及管道。数据事件忽略流控制,是否应停止使用“平原数据事件”?
发布于 2014-03-31 06:11:20
在大多数情况下,您应该能够使用
src.pipe(dest);如果您查看Stream.prototype.pipe实现的源代码,您会发现它只是一个非常方便的包装器,可以为您设置所有的东西
对于我处理流的所有工作,我通常只选择合适的流类型(Readable、Writable、Duplex、Transform或PassThrough),然后在流上定义合适的方法(_read、_write和/或_transform)。最后,我使用.pipe将所有东西连接在一起。
这是非常常见的看到流的设置,似乎是“圆形”
client.pipe(encoder).pipe(server).pipe(decoder).pipe(client)举个例子,这里是我在驴子模块中使用的流。您可以将对象写入该流,也可以从它读取 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);
};作为一个一般性建议,您几乎总是这样编写您的流。也就是说,您可以编写您自己的“类”,该类继承自内置流之一。对于您来说,直接使用内置流是不实际的。
要演示如何使用它,请从创建流的新实例开始。
var encoder = new Encoder();通过将编码器输送到标准输出,查看编码器输出的内容。
encoder.pipe(process.stdout);向它写入一些示例对象
encoder.write({foo: "bar", a: "b"});
// '{"foo":"bar","a":"b"}'
encoder.write({hello: "world"});
// '{"hello":"world"}'https://stackoverflow.com/questions/22754601
复制相似问题