はじめてのWritableStream(stream2)

stream2のWritableStreamを書いてみました。

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

function WStream(options) {
  options || (options = {});
  stream.Writable.call(this, options);
}

util.inherits(WStream, stream.Writable);

WStream.prototype._write = function(chunk, encoding, callback) {
  process.stdout.write(chunk.toString(encoding));
  callback(null);
};



var aaa = new WStream();

require('fs').createReadStream(__filename).pipe(aaa);

これで一応動いた。


以下はEventEmitterスタイルで。

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

function WStream(options) {
  options || (options = {});
  stream.Writable.call(this, options);
}

util.inherits(WStream, stream.Writable);

WStream.prototype._write = function(chunk, encoding, callback) {
  process.stdout.write(chunk.toString(encoding));
  callback(null);
};



var aaa = new WStream();

aaa.on('finish', function() {
  console.log('finished');
});

aaa.write('hoge\n');
aaa.write('hoge\n');
aaa.write('hoge\n');
aaa.end('');


Readable, Writableの両方を書いてみて、やっぱり書いてみないと理解できないものだなあ、と思った。
それはそうとstream2は実装がかなり楽かも。_readと_writeを適当に書いておくとちゃんと動くもの。


とまあ、基本的な二つはまあまあわかったのだけど、一番知りたいのはDuplexだ!
でも今日は疲れたので明日かなー。