Viewing version 0.1.0. Open the latest package page.
raw
0.1.0A package for writing, reading, and debugging binary data.
This package is discontinued upstream.
Readme
Introduction
A package for writing, reading, and debugging binary data.
Issues & contributing
A walkthrough
Key classes
- RawWriter:
- Writes bytes to a buffer.
- Automatically expands the buffer when
isExpandingis true.
- RawReader:
- Reads bytes from a buffer.
- If reading fails, throw descriptive exceptions.
- SelfEncoder
- Classes that know how to encode state using RawWriter.
- SelfDecoder
- Classes that know how to decode state using RawReader.
- SelfCodec
- Classes that implement both SelfEncoder and SelfDecoder.
Example of SelfCodec
A typical implementation of SelfCodec looks like this:
class MyStruct extends SelfCodec {
int intField = 0;
String stringField = "";
@override
void encodeSelf(RawWriter writer) {
writer.writeInt32(intField);
writer.writeUint32(stringField.length, Endian.little);
writer.writeUtf8(stringField);
}
@override
void decodeSelf(RawReader reader) {
intField = reader.readInt32();
final stringLength = reader.readUint32(Endian.little);
stringField = reader.readUtf(stringLength);
}
}
Supported primitives
- Numeric types
- Unsigned/signed integers
Uint8/Int8Uint16/Int16Uint32/Int32FixInt64/FixInt64(Int64 from fixnum)
- Floating- point values
Float32Float64
- Variable-length integers (identical with Protocol Buffers encoding)
VarUintVarInt
- Unsigned/signed integers
- Sequence types
- Uint8List
- ByteData
- Strings
Utf8/Utf8NullEndingUtf8SingleByte/Utf8SingleByteNullEnding
- Zeroes
Helpers for testing
import 'package:test/test.dart';
import 'package:raw/raw_test.dart';
void main() {
test("an example", () {
final value = [9,8,7];
final expected = [1,2,3];
expect(value, byteListEquals(expected));
// Output:
// 0x0000: 0908 07
// (0) ^^^^ ^^
// 0102 03
});
}
If your class implements SelfEncoder, use selfEncoderEquals:
class MyStruct extends SelfCodec {
// ...
}
void main() {
test("an example", () {
// ...
expect(myStruct, selfEncoderEquals(expected));
});
}
Converting hex formats to bytes
DebugHexDecoder is able to import hex formats such as:
- "0000000: 0123 4567 89ab cdef 0123 4567 89ab cdef ................"
- "0000010: 012345678 ............ # comment"
- "012345678abcdef // no prefix"
Converting bytes to hex-based descriptions
DebugHexEncoder converts bytes to the following format:
0x0000: 0123 4567 89ab cdef 0123 4567 89ab cdef
(0)
0x0010: 0123 4567 89ab cdef 0123 4567 89ab cdef
(16)
If expected byte list is specified, bytes are converted to the following format:
0x0000: 0123 5555 89ab cdef 0123 4567 89ab cdef
(0) ^ ^^ <-- index of the first error: 0x02 (decimal: 2)
4 67
0x0010: 0123 4567 89ab cdef 0123 4567 89
(16) ^^ ^^^^ <-- index of the first error: 0x0D (decimal: 13)
ab cdef
Changelog
0.0.1
- Initial Release
Installing
export PUB_HOSTED_URL=https://pub.mirror.p-hatan.ir
flutter pub add 'raw:0.1.0'pubspec.yaml
name: raw
version: 0.1.0
author: terrier989 <terrier989@gmail.com>
homepage: https://github.com/terrier989/dart-raw
description: A package for writing, reading, and debugging binary data.
environment:
sdk: '>=2.0.0 <3.0.0'
dependencies:
collection: '^1.0.0'
fixnum: '^0.10.0'
matcher: '>=0.9.0 <2.0.0'
meta: '^1.0.0'
dev_dependencies:
benchmark_harness: ^1.0.0
test: ^1.0.0Version history
Dependencies
collection "^1.0.0"
fixnum "^0.10.0"
matcher "\u003e=0.9.0 \u003c2.0.0"
meta "^1.0.0"