write method
Writes view
to targetSink
in binary format.
Implementation
Future<void> write(
GpsPointsView view, StreamSink<List<int>> targetSink) async {
final sink = StreamSinkWriter(targetSink);
// Write the signature and version of the persistence system.
sink.writeString(_signatureAndVersion.signature);
sink.writeUint16(_signatureAndVersion.version);
final persister = getPersister(view);
// Write the signature and version information of the persister.
sink.writeString(persister.signature);
sink.writeUint16(persister.version);
// Write the metadata of the persister.
final metadata = persister.getMetadata(view) ?? ByteData(0);
if (metadata.lengthInBytes > maxMetadataLength) {
throw (InvalidMetadataException(
'Incorrect meta information length. Expected max $maxMetadataLength '
'but provided with ${metadata.lengthInBytes} bytes.'));
}
// First the size of the metadata...
sink.writeUint8(metadata.lengthInBytes);
// ...then the metadata...
sink.writeBytes(metadata.buffer.asUint8List());
// ...and finally any necessary all-zero padding.
sink.writeBytes(
List<int>.filled(maxMetadataLength - metadata.lengthInBytes, 0));
// Write the view.
return targetSink.addStream(persister.writeViewToStream(view));
}