read method

  1. @override
Future<Uint8List> read(
  1. int offset,
  2. int count
)
override

Implementation

@override
Future<Uint8List> read(int offset, int count) async {
  final int safe = clampCount(offset, count);
  if (safe == 0) return Uint8List(0);
  if (safe > uDocBlockSize * 8) return inner.read(offset, safe);
  final Uint8List? hit = peek(offset, safe);
  if (hit != null) return hit;
  final int first = offset ~/ uDocBlockSize;
  final int last = (offset + safe - 1) ~/ uDocBlockSize;
  final Uint8List out = Uint8List(safe);
  int written = 0;
  for (int index = first; index <= last; index++) {
    final Uint8List block = await _block(index);
    final int blockStart = index * uDocBlockSize;
    final int from = offset > blockStart ? offset - blockStart : 0;
    final int to = (offset + safe) < (blockStart + block.length) ? offset + safe - blockStart : block.length;
    if (to <= from) break;
    out.setRange(written, written + (to - from), block, from);
    written += to - from;
  }
  return written == safe ? out : Uint8List.sublistView(out, 0, written);
}