はじめての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だ!
でも今日は疲れたので明日かなー。