MeasurementSeries.fromBytes constructor
MeasurementSeries.fromBytes(
- Uint8List bytes
Implementation
factory MeasurementSeries.fromBytes(Uint8List bytes) {
var offset = 0;
final labelLength = bytes.buffer.asUint16List(offset, 1).single;
offset += Uint16List.bytesPerElement;
// The data isn't 16-bit aligned, so we need to first create a copy
// of the list that is just bytes, and then look at its buffer
// as a 16-bit list.
final labelBytes =
Uint8List.fromList(bytes.buffer.asUint8List(offset, labelLength))
.buffer
.asUint16List();
final label = String.fromCharCodes(labelBytes);
offset += labelBytes.lengthInBytes;
final measurementLength = Uint8List.fromList(
bytes.buffer.asUint8List(offset, Uint64List.bytesPerElement))
.buffer
.asUint64List()
.single;
offset += Uint64List.bytesPerElement;
final measurementZippedBytes =
bytes.buffer.asUint8List(offset, measurementLength);
final measurementUnzippedBytes = lzma.decode(measurementZippedBytes);
final measurements =
Uint8List.fromList(measurementUnzippedBytes).buffer.asInt64List();
assert(
bytes.lengthInBytes ==
Uint16List.bytesPerElement +
labelLength +
Uint64List.bytesPerElement +
measurementLength,
'The data length of $bytes is not equivalent to the sum of its parts');
return MeasurementSeries(label, measurements);
}