2016-10-24 8 views
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)を呼び出してストリームがデータを要求していますか?なぜ内部バッファが空にならないのですか?

ありがとうございます!

答えて

0

私はthis.pushの戻り値を理解していないようです。私はそれがfalseを返すまでデータをプッシュする必要があります。 私はそれがunseccessfullだと思ったので、私は偽を持っているときに私は再びチャンクをプッシュしようとしました。

関連する問題