JavaScriptのstreamでreadするとnullが返ってきてしまう。
こんにちは、(node | io).jsのStreamについての質問をした者です。今、Streamの勉強をしているのですが上記の質問と同じようにhelloworld.txtを読み込み、"MyPush\n"という文字列を追加し、process.stdoutに表示するということを、pipeを使わず、代わりにwriteやreadを使って、やってみようと考えています。
しかし、下記のコードを実行すると例のようなエラーが出ます。どうすればいいのでしょうか?
var Transform = require("stream").Transform;
var util = require("util");
var fs = require("fs");
var StringDecoder = require("string_decoder").StringDecoder;
var process = require("process");
util.inherits(MyStream, Transform);
function MyStream() {
Transform.call(this);
}
MyStream.prototype._transform = (chunk, encoding, callback) => {
var data = chunk;
var utf8decoder = new StringDecoder("utf8");
var decoded_data = utf8decoder.write(data);
var send_data = decoded_data + "MyPush\n";
this.push(send_data);
callback();
}
var readable_stream = fs.createReadStream("helloworld.txt");
readable_stream.on("end", () => {
console.log("end");
});
var mystream = new MyStream();
mystream.on("readable", () => {
var data = this.read();
process.stdout.write(data);
});
readable_stream.on("readable", () => {
var data = readable_stream.read();
console.log("DATA", data); // return the null
mystream.write(data);
});
エラーの例
_stream_writable.js:263
var len = state.objectMode ? 1 : chunk.length;
^
TypeError: Cannot read property 'length' of null
at writeOrBuffer (_stream_writable.js:263:41)
at MyStream.Writable.write (_stream_writable.js:210:11)
at ReadStream. (/Users/username/jsworks/my_stream2.js:39:14)
at emitNone (events.js:67:13)
at ReadStream.emit (events.js:163:7)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:402:7)
at onEofChunk (_stream_readable.js:385:3)
at readableAddChunk (_stream_readable.js:129:7)
at ReadStream.Readable.push (_stream_readable.js:109:10)