readRange method

  1. @override
Uint8List readRange(
  1. int offset,
  2. int length
)
override

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;
}