• Node.js数据流Stream之Duplex流和Transform流


    Duplex流一个很好的例子是TCP套接字连接.需要实现_read(size)和_Write(data,encoding,callback)方法.

    var stream = require('stream');
    var util = require('util');
    util.inherits(Duplexer, stream.Duplex);
    function Duplexer(opt) {
      stream.Duplex.call(this, opt);
      this.data = [];
    }
    Duplexer.prototype._read = function readItem(size) {
      var chunk = this.data.shift();
      if (chunk == "stop"){
        this.push(null);
      } else{
        if(chunk){
          this.push(chunk);
        }
      }
    };
    Duplexer.prototype._write = function(data, encoding, callback) {
      this.data.push(data);
      callback();
    };
    var d = new Duplexer({allowHalfOpen:true});
    d.on('data', function(chunk){
      console.log('read: ', chunk.toString());
    });
    d.on('readable',function(){
      console.log("readable");
    })
    d.on('end', function(){
      console.log('Message Complete');
    });
    d.write("I think, ");
    d.write("therefore ");
    d.write("I am.");
    d.write("Rene Descartes");
    d.write("stop");
    "C:Program Files (x86)JetBrainsWebStorm 11.0.3in
    unnerw.exe" F:
    odejs
    ode.exe stream_duplex.js
    read:  I think, 
    read:  therefore 
    read:  I am.
    read:  Rene Descartes
    readable
    readable
    readable
    Message Complete
    
    Process finished with exit code 0

    Transform变换流扩展了Duplex流,不需要实现而是直接提供。但要实现_transform(chunk,encoding,callback)._flush()这个方法不知道用来做什么的目前

    var stream = require("stream");
    var util = require("util");
    util.inherits(JSONObjectStream, stream.Transform);
    function JSONObjectStream (opt) {
      stream.Transform.call(this, opt);
    };
    JSONObjectStream.prototype._transform = function (data, encoding, callback) {
      object = data ? JSON.parse(data.toString()) : "";
      this.emit("object", object);
      object.handled = true;
      this.push(JSON.stringify(object));
      callback();
    };
    var tc = new JSONObjectStream();
    tc.on("object", function(object){
      console.log("Name: %s", object.name);
      console.log("Color: %s", object.color);
    });
    tc.on("data", function(data){
      console.log("Data: %s", data.toString());
    });
    tc.write('{"name":"Carolinus", "color": "Green"}');
    tc.write('{"name":"Solarius", "color": "Blue"}');
    tc.write('{"name":"Lo Tae Zhao", "color": "Gold"}');
    tc.write('{"name":"Ommadon", "color": "Red"}');
    "C:Program Files (x86)JetBrainsWebStorm 11.0.3in
    unnerw.exe" F:
    odejs
    ode.exe stream_transform.js
    Name: Carolinus
    Color: Green
    Data: {"name":"Carolinus","color":"Green","handled":true}
    Name: Solarius
    Color: Blue
    Data: {"name":"Solarius","color":"Blue","handled":true}
    Name: Lo Tae Zhao
    Color: Gold
    Data: {"name":"Lo Tae Zhao","color":"Gold","handled":true}
    Name: Ommadon
    Color: Red
    Data: {"name":"Ommadon","color":"Red","handled":true}
    
    Process finished with exit code 0
  • 相关阅读:
    111. Minimum Depth of Binary Tree (Tree; DFS)
    124. Binary Tree Maximum Path Sum (Tree; DFS)
    99. Recover Binary Search Tree (Tree; DFS)
    129. Sum Root to Leaf Numbers(Tree; DFS)
    PAT 1073 Scientific Notation
    PAT 1050 String Subtraction
    PAT 1037 Magic Coupon
    PAT 1066 Root of AVL Tree
    PAT 1053 Path of Equal Weight
    PAT 1040 Longest Symmetric String
  • 原文地址:https://www.cnblogs.com/5ishare/p/5303376.html
Copyright © 2020-2023  润新知