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.