FlatBuffers ist eine von Google entwickelte, effiziente Cross-Platform-Serialisierungsbibliothek (ursprünglich 2014 für die Spieleentwicklung von Wouter van Oortmerssen, Apache License 2.0). Ihr besonderes Merkmal: Serialisierte Daten lassen sich direkt aus dem Speicher lesen, ohne sie vorher zu parsen oder zu entpacken (Zero-Copy).
Schema: die .fbs-Datei
Strukturen werden in .fbs-Schemata definiert. Zentrale Konstrukte sind table (optional erweiterbar, Felder mit Defaults), struct (feste Größe, inline eingebettet), enum und union:
namespace MyGame.Sample;
table Monster {
name: string;
hp: short = 100;
pos: Vec3;
inventory: [ubyte];
}
struct Vec3 { x: float; y: float; z: float; }
root_type Monster;
flatc: der Compiler
Der FlatBuffers-Compiler flatc wird per CMake gebaut und erzeugt aus dem Schema Code für die Zielsprache:
# C++-Code erzeugen (inkl. Mutator-Methoden)
flatc --cpp --gen-mutable monster.fbs
# Python und Rust parallel
flatc --python --rust monster.fbs
Verfügbare Sprach-Engines: --cpp, --csharp, --go, --java, --kotlin, --javascript, --typescript, --python, --rust, --swift, --php, --lua und mehr. Mit dem Flag --proto kann flatc sogar .proto-Dateien (Protocol Buffers) in .fbs-Schemata konvertieren; --size-prefixed erzeugt Längen-präfixierte Puffer.
Lesen ohne Parsen
Der generierte Zugriffscode greift per Offset-Tabelle direkt auf die Felder im Puffer zu — es wird nichts alloziert oder umkopiert, was Latenz und Speicherdruck minimiert. Daher eignet sich FlatBuffers besonders für Spiele, Mobile-Anwendungen und Performance-kritische Pfade. Änderungen am Schema bleiben dank table und Feldnummern abwärtskompatibel.
Verwandte Grundlagen: Protobuf-Befehle und Thrift (klassische Serialisierungs-Frameworks), Rust-Befehle und C/C++-Befehle für den Einsatz in systemnahen Umgebungen.