9135


jsのStreamについて勉強しています。  
readableイベントについて勉強するために  
下記のコードを書いたのですが、うまく動きません。

helloworld.txtの内容をconsoleに表示 -> MyPushを付け加える -> process.stdout  
(標準出力)に送る

ということがしたいのですが、どうやら、process.stdoutにnullが送られているようです。  
どうすればいいのでしょうか?  
ちなみに `iojs --harmony_arrow_functions`で動かしています。

[code]

    
    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("readable", () => {
        var chunk = readable_stream.read();
        console.log("Data", chunk);
    });
    
    readable_stream.on("end", () => {
        console.log("end");
    });
    var mystream = new MyStream();
    mystream.on("readable", () => {
       var chunk = mystream.read();
        mystream.write(chunk);
    
    })
    readable_stream.pipe(mystream).pipe(process.stdout);
    
    
    
[/code]


CC BY-SA 3.0
2015-04-13T12:17:51.377
9118
2015-08-26T15:17:23.983
2015-08-26T15:17:23.983
2238
5246
question
javascript node.js iojs
(node | io).jsのStreamについて


おそらくですが...

`read()` メソッドによるデータの読み出しと、`pipe`によるデータの読み出しが衝突しているものと思います。  
イベントによって受信したデータを配布する`data`イベントと異なり、`read()`メソッドはキューからデータを取り出します
(`readable`はキューにデータが入ってきたことを通知するイベント)。  
そのため、誰かがデータを取り出すとキューが空になってしまうのではないかと。

(Node v0.12.2 で実行したところ、逆に `read()` メソッドの結果が `null` でした)


CC BY-SA 3.0
2015-04-14T02:43:00.057
9135
2015-04-14T02:43:00.057
4809
9118
answer