read method

Future<Uint8List> read(
  1. String name
)

Implementation

Future<Uint8List> read(String name) async {
  final Uint8List? cached = _cache.get(name);
  if (cached != null) return cached;
  final UEpubZipEntry? entry = entries[name];
  if (entry == null) return Uint8List(0);
  final Uint8List header = await source.read(entry.headerOffset, 30);
  if (header.length < 30) return Uint8List(0);
  final int nameLength = _readU16(header, 26);
  final int extraLength = _readU16(header, 28);
  final int dataOffset = entry.headerOffset + 30 + nameLength + extraLength;
  final int available = source.length - dataOffset;
  final int take = entry.compressedSize > 0 && entry.compressedSize <= available ? entry.compressedSize : available;
  if (take <= 0) return Uint8List(0);
  final Uint8List raw = await source.read(dataOffset, take);
  final Uint8List data = entry.method == 0 ? raw : UPdfCodecs.inflate(raw);
  if (data.length < 4 * 1024 * 1024) _cache.put(name, data);
  return data;
}