Я пытаюсь реализовать читаемый поток. Источник данных - это измерительный инструмент, создающий множество данных при запуске. Я пытаюсь нажать большое количество данных сразу в моей реализации _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), даже если внутренний буфер заполнен? Почему внутренний буфер не очищается?
Спасибо!