readUntilTerminatingByte method
Reads the buffer until the terminating value is reached
(e.g. null-terminated bytes).
When include is set, the returned Uint8List will also contain the
terminating value, otherwise it is left out.
Throws StateError when value is not yet present in the buffer.
Implementation
Uint8List readUntilTerminatingByte(
int value, {
bool? copy,
bool include = false,
}) {
final bb = BytesBuffer(copy: copy ?? _copy);
while (true) {
_clearQueue();
if (_queue.isEmpty) {
if (bb.length > 0) {
_queue.add(bb.toBytes());
}
throw StateError('Not enough bytes to read.');
}
final index = _queue.first.indexOf(value, _offset);
if (index < 0) {
_removeFirstQueueItemAddToBuffer(bb);
continue;
} else {
final amount = (include ? index + 1 : index) - _offset;
if (amount > 0) {
_addNextBytesToBuffer(bb, amount);
}
break;
}
}
if (!include) {
_offset++;
}
return bb.toBytes();
}