readRange method
Implementation
@override
Uint8List readRange(int offset, int length) {
if (offset < 0 || length <= 0 || offset >= _inner.length) {
return Uint8List(0);
}
final end = offset + length > _inner.length ? _inner.length : offset + length;
final out = Uint8List(end - offset);
int dst = 0;
int pos = offset;
while (pos < end) {
final blockIndex = pos ~/ blockSize;
final blockOffset = blockIndex * blockSize;
final block = _getBlock(blockIndex, blockOffset);
final startInBlock = pos - blockOffset;
final copyLen = (end - pos) < (block.length - startInBlock)
? (end - pos)
: (block.length - startInBlock);
out.setRange(dst, dst + copyLen, block, startInBlock);
dst += copyLen;
pos += copyLen;
}
return out;
}