如何分块对象流?

时间:2016-07-20 13:18:01

标签: node.js stream

我有一个对象流(objectMode: true),并希望将其分块为相同大小的数组,以便我可以将它们传递给另一个接受数组的函数。我发现以下模块似乎可以实现缓冲区,但不适用于对象:

您是否知道可以为对象流执行此操作的模块,或者是否有明显简单的DIY解决方案?

1 个答案:

答案 0 :(得分:3)

我找到了以下工作:

function ItemCollector (chunkSize) {

  this._buffer = [];
  this._chunkSize = chunkSize;

  stream.Transform.call(this, { objectMode: true });
}

util.inherits(ItemCollector, stream.Transform);

ItemCollector.prototype._transform = function (chunk, encoding, done) {

  if (this._buffer.length == this._chunkSize) {

    this.push(this._buffer);
    this._buffer = [];
  }

  this._buffer.push(chunk);

  done();
};

ItemCollector.prototype._flush = function () {

  this.push(this._buffer);
};

像这样使用:

objectStream.pipe(new ItemCollector(10)).pipe(otherFunction)