binary_serializable 0.3.6 copy "binary_serializable: ^0.3.6" to clipboard
binary_serializable: ^0.3.6 copied to clipboard

Efficient binary serialization and deserialization, optimized for streams of binary data.

example/example.dart

import 'package:binary_serializable/binary_serializable.dart';

class Person {
  final String name;
  final int age;
  final List<Person> children;

  Person({required this.name, required this.age, required this.children});
}

void main() {
  final sample = Person(
    name: 'Alice',
    age: 87,
    children: [
      Person(
        name: 'Bob',
        age: 49,
        children: [
          Person(
            name: 'Tina',
            age: 17,
            children: [],
          ),
        ],
      ),
      Person(
        name: 'Joe',
        age: 49,
        children: [],
      ),
    ],
  );

  final encoded = PersonType().encode(sample);

  print(
    'Encoded data: ${encoded.map((b) => b.toRadixString(16).padLeft(2, '0')).join(' ')}',
  );

  final decoded = PersonType().decode(encoded);

  print(
    '1st child of decoded sample: ${decoded.children.first.name} (${decoded.children.first.age}, ${decoded.children.first.children.length} child)',
  );
}

// The code below can be automatically generated by
// binary_serializable_generator.

class PersonType extends BinaryType<Person> {
  const PersonType();

  @override
  void encodeInto(Person input, BytesBuilder builder) {
    utf8String.encodeInto(input.name, builder);
    uint8.encodeInto(input.age, builder);
    const LengthPrefixedListType(uint8, PersonType())
        .encodeInto(input.children, builder);
  }

  @override
  BinaryConversion<Person> startConversion(void Function(Person p1) onValue) =>
      PersonConversion(onValue);
}

class PersonConversion extends CompositeBinaryConversion<Person> {
  PersonConversion(super.onValue);

  @override
  BinaryConversion startConversion() {
    return utf8String.startConversion((name) {
      currentConversion = uint8.startConversion((age) {
        currentConversion = const LengthPrefixedListType(uint8, PersonType())
            .startConversion((children) {
          onValue(Person(name: name, age: age, children: children));
        });
      });
    });
  }
}
copied to clipboard
1
likes
160
points
92
downloads

Publisher

verified publisherdartcommunity.dev

Weekly Downloads

2024.09.20 - 2025.04.04

Efficient binary serialization and deserialization, optimized for streams of binary data.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

meta

More

Packages that depend on binary_serializable