gpt4 book ai didi

node.js - 如何实现可写流

转载 作者:IT老高 更新时间:2023-10-28 21:52:52 25 4
gpt4 key购买 nike

我想将数据从 amazon kinesis 流传输到 s3 日志或 bunyan 日志。

该示例适用于文件写入流或标准输出。我将如何实现自己的可写流?

//this works
var file = fs.createWriteStream('my.log')
kinesisSource.pipe(file)

说它没有“on”方法是行不通的

var stream = {}; //process.stdout works however
stream.writable = true;
stream.write =function(data){
console.log(data);
};
kinesisSource.pipe(stream);

我必须为自己的自定义可写流实现哪些方法,文档似乎表明我需要实现“写入”而不是“开启”

最佳答案

要创建自己的可写流,您有三种可能性。

创建自己的类

为此,您需要:

  1. 扩展 Writable 类。
  2. 在自己的构造函数中调用 Writable 构造函数。
  3. 在流对象的原型(prototype)中定义 _write() 方法。

这是一个例子:

var stream = require('stream');
var util = require('util');

function EchoStream () { // step 2
stream.Writable.call(this);
};
util.inherits(EchoStream, stream.Writable); // step 1
EchoStream.prototype._write = function (chunk, encoding, done) { // step 3
console.log(chunk.toString());
done();
}

var myStream = new EchoStream(); // instanciate your brand new stream
process.stdin.pipe(myStream);

扩展一个空的 Writable 对象

您可以实例化一个空的 Writable 对象并实现 _write() 方法,而不是定义一个新的对象类型:

var stream = require('stream');
var echoStream = new stream.Writable();
echoStream._write = function (chunk, encoding, done) {
console.log(chunk.toString());
done();
};

process.stdin.pipe(echoStream);

使用简化的构造函数 API

如果你使用 io.js,你可以使用 simplified constructor API :

var writable = new stream.Writable({
write: function(chunk, encoding, next) {
console.log(chunk.toString());
next();
}
});

在 Node 4+ 中使用 ES6 类

class EchoStream extends stream.Writable {
_write(chunk, enc, next) {
console.log(chunk.toString());
next();
}
}

关于node.js - 如何实现可写流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com