0
読み取り可能なストリームを実装しようとしています。データソースは、開始時に大量のデータを生成する測定ツールです。 私は_read(size)実装で一度に大量のデータをプッシュしようとしています。 測定を開始してストリームを延期すると、内部バッファよりも多くのデータがあるので、私は奇妙な動作をします。読み込み可能なストリームNodeJSは、一度に大量のデータをプッシュします
- 私が要求されたサイズのデータをプッシュしよう - >エラーを、それを削減する必要が少し
- (32私の場合)でも、最初のプッシュが成功している、インターフェイスは再び_read(サイズ)を呼び出します、私は要求されたサイズをプッシュするトライ、私はエラーがあった。内部バッファーはまだいっぱいです。
- データが内部バッファより大きくなる前にストリームを開始すると、すべてが機能します。
ここでは私のコードです:
_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)を呼び出してストリームがデータを要求していますか?なぜ内部バッファが空にならないのですか?
ありがとうございます!