27. Use generated code for
reading
public sealed class Person : Table {
public static Person GetRootAsPerson(ByteBuffer _bb) {...}
public static Person GetRootAsPerson(ByteBuffer _bb, Person obj) {...}
public string Name { get { ... } }
public int Age { get { ... } }
};
byte[] data = ...;
Person person = Person.GetRootAsPerson(new ByteBuffer(data));
28. Suffer through generated code
for writing
public sealed class Person : Table {
public static Offset<Person> CreatePerson(FlatBufferBuilder builder,
StringOffset name = default(StringOffset),
int age = 0) {
...
}
public static void FinishPersonBuffer(FlatBufferBuilder builder, Offset<Person> offset) { ... }
};
FlatBufferBuilder fbb = new FlatBufferBuilder(1);
var nameOffset = fbb.CreateString("maxim");
var personOffset = Person.CreatePerson(fbb, nameOffset, 34);
Person.FinishPersonBuffer(fbb, personOffset);
byte[] data = fbb.SizedByteArray();
40. I wanted to make
writing more
usable
specially for unit testing
41.
42. Eager serialization
public sealed class Person : Table {
public string name;
public int age;
public static Person FromByteArray(byte[] data) {...}
public byte[] ToByteArray(){...}
}
// var person = new Person();
byte[] data = ...;
var person = Person.FromByteArray(data);
person.name = "Alex";
byte[] data2 = person.ToByteArray();
43.
44. let person = Person(name: "Maxim", age: 34)
let fbData = person.toByteArray
NSData( bytes: UnsafePointer<UInt8>(fbData),
length: fbData.count)
.writeToFile("person.bin", atomically: true)
47. FlatBuffersSwift benchmark
• 65.015 mseconds for parsing JSON (3.6MB)
• 36.478 mseconds for eager FlatBuffers (2.1MB)
• 00.002 mseconds for lazy FlatBuffers (2.1MB)
48. Some rain on FlatBuffers
parade
• Zip JSON: 3.6MB -> 739KB
• Zip FB: 2.1MB -> 1.1MB
49. Outlook for FlatBuffers
• real Graph not a Tree
• could support streaming
• is easy to encrypt
• could be very memory efficient with custom
compression