简体   繁体   English

Node.js流

[英]Node.js streams

Im using the zlib component of node js to deflate data, using 我使用节点js的zlib组件缩小数据,使用

var stream = zlib.createDeflate({ "level": level });                             
stream.write(string);                                                            
stream.on('data', function(data) {console.log(data.toString())});

However, the the data callback is only run once with a buffer 'x'. 但是,数据回调仅在缓冲区“ x”下运行一次。 What I want is to extract the deflated data from the stream into a variable, asynchronous or not. 我想要的是将流中的压缩数据提取到一个变量中,无论是否异步。 All examples of streams that I have found are writing data between streams. 我发现的所有流示例都在流之间写入数据。

Try this 尝试这个

var stream = zlib.createDeflate({ "level": level });             
var buffers = [];
var result;                
stream.on('data', function(data) {buffers.push(data)});
stream.on('close', function() {  
    result = Buffer.concat(buffers);
    console.log('COMPRESSED DATA:', result);  
})

stream.write(string);
stream.end();

I ended up using 我最终使用

  function deflate(string, level) {

  var fiber = fibers.current;

  var result = [];

  var out = new stream.Stream();

  out.write = function(data) {
    result.push(data);
  }

  out.end = function() {
    result = Buffer.concat(result);
    fiber.run(result.toString('base64'));
  }

  var deflate = zlib.createDeflate({ "level": level });
  deflate.end(string, 'utf8');
  deflate.pipe(out);

  return fibers.yield();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM