如何实现可写流

我想将数据从亚马逊运动流传输到S3日志或Bunyan日志。

该示例适用于文件写入流或stdout。我如何才能体现自己的可写流?

//this works

var file = fs.createWriteStream('my.log')

kinesisSource.pipe(file)

表示没有“打开”方法是行不通的

var stream = {}; //process.stdout works however

stream.writable = true;

stream.write =function(data){

console.log(data);

};

kinesisSource.pipe(stream);

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

回答:

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

创建自己的课程

为此,您需要1)扩展Writable类2)在您自己的构造函数中调用Writable构造函数3)_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对象并实现该_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,则可以使用简化的构造函数API:

var writable = new stream.Writable({

write: function(chunk, encoding, next) {

console.log(chunk.toString());

next();

}

});

在节点4+中使用ES6类

class EchoStream extends stream.Writable {

_write(chunk, enc, next) {

console.log(chunk.toString());

next();

}

}

以上是 如何实现可写流 的全部内容, 来源链接: utcz.com/qa/399709.html

回到顶部