readMany method
Implementation
Future<List<int>> readMany(
List<ReadRequest> requests, {
CancelToken? cancel,
}) async {
cancel?.throwIfCancelled(path: path);
if (requests.length > 1) {
final merged = _tryMergeReadContiguous(requests);
if (merged != null) {
final bytes = Uint8List(merged.total);
final n = await readAt(merged.offset, ReadBuf(bytes), cancel: cancel);
final out = <int>[];
var base = 0;
for (final request in requests) {
final want = request.dst.remaining;
final available = (n - base).clamp(0, want);
if (available > 0) {
request.dst.unfilled.setRange(0, available, bytes, base);
request.dst.advance(available);
}
out.add(available);
base += want;
}
return out;
}
if (_backend.supportsConcurrentReads) {
return Future.wait([
for (final request in requests)
readAt(request.offset, request.dst, cancel: cancel),
]);
}
}
final out = <int>[];
for (final request in requests) {
out.add(await readAt(request.offset, request.dst, cancel: cancel));
}
return out;
}