NodeJS,可读流,一次性推送大量数据



我正在尝试实现一个可读流。数据源是在启动时产生大量数据的度量工具。我试图在我的_read(size)实现中一次推送大量数据。当我开始测量并延迟流时,我已经有了比内部缓冲区更多的数据,我得到了奇怪的行为。

  • 我尝试推送请求大小的数据->错误,需要减少一点(在我的情况下32)
  • 即使第一次推送成功,接口再次调用_read(size),当我尝试推送请求的大小时,我得到了一个错误。内部缓冲区仍然满。
  • 当我在数据比内部缓冲区大之前启动流时,一切正常。
下面是我的代码:

  _read(size) {
    var bytesAvailible = this._tool.getCurrentAddress() - this._offset;
    var bufferStatus = this._readableState.highWaterMark - this._readableState.length -32;
    var bytesToRead = Math.min(bytesAvailible, size - 32);
    console.log("Cur Addr: ", this._tool.getCurrentAddress().toString(16),
      " hwm: ", this._readableState.highWaterMark,
      " length: ", this._readableState.length,
      " bytesAvailible: ", bytesAvailible,
      " size requested: ", size);
    var chunk = getData(this._offset, bytesToRead);
    if (!this.push(chunk)) {
      console.log("Error pushing.");
      return;
    } else {
      console.log("Pushed address:  ", (this._offset).toString(16), " - ",(this._offset + chunk.length).toString(16), " Size: ", chunk.length);
      this._offset += bytesToRead; // set offset to next address not read;
    }
  }

这里输出:

Cur Addr:  2000ef20  hwm:  16384  length:  0  bytesAvailible:  61216  size requested:  16384
Pushed address:   20000000  -  20003fe0  Size:  16352
Cur Addr:  2000ef40  hwm:  16384  length:  16352  bytesAvailible:  44896  size requested:  16384
Error pushing.
Cur Addr:  2000ef80  hwm:  16384  length:  16352  bytesAvailible:  44960  size requested:  16384
Error pushing.
Cur Addr:  2000efa0  hwm:  16384  length:  16352  bytesAvailible:  44992  size requested:  16384
Error pushing.
Cur Addr:  20010140  hwm:  16384  length:  32704  bytesAvailible:  49504  size requested:  16384
Error pushing.
Cur Addr:  20010160  hwm:  16384  length:  32704  bytesAvailible:  49536  size requested:  16384
Error pushing.

有人能帮忙吗?为什么流通过调用_read(size)请求数据,即使内部缓冲区已满?为什么内部缓冲区没有被清空?

谢谢!

似乎我没有理解this.push的返回值。我需要推入数据,直到它返回false。当我得到false的时候,我试着再次推这个块,因为我认为它不成功。

相关内容

  • 没有找到相关文章

最新更新