toBytes method
Serialize to a single blob (for an asset, a cache file, or a message to another isolate).
Implementation
Uint8List toBytes() {
final entryBytes = utf8.encode(entry);
var length = 4 + 4 + 4 + entryBytes.length + 4;
final names = <List<int>>[];
for (final name in modules.keys) {
final nameBytes = utf8.encode(name);
names.add(nameBytes);
length += 4 + nameBytes.length + 4 + modules[name]!.length;
}
final out = Uint8List(length);
final view = ByteData.view(out.buffer);
var offset = 0;
void putUint32(int value) {
view.setUint32(offset, value, Endian.little);
offset += 4;
}
void putBytes(List<int> bytes) {
out.setRange(offset, offset + bytes.length, bytes);
offset += bytes.length;
}
putUint32(_magic);
putUint32(_formatVersion);
putUint32(entryBytes.length);
putBytes(entryBytes);
putUint32(modules.length);
var i = 0;
for (final bytecode in modules.values) {
putUint32(names[i].length);
putBytes(names[i]);
putUint32(bytecode.length);
putBytes(bytecode);
i++;
}
return out;
}