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