Google "Fun Propulsion Labs" チームがFlatBuffersをオープンソース化した。FlatBuffersは特にゲーム開発者のパフォーマンス要求をサポートするために作られており、シリアライズされたデータをバッファに格納する。バッファはパースのオーバーヘッドなしに、ファイルに格納したり、そのままネットワークに伝送したりすることができる。
FlatBuffersのキーフィーチャーは以下の通り。
- パッキング/アンパッキングなしで、シリアライズされたデータにアクセス
- メモリ効率とスピード - データにアクセスするのに必要なメモリはバッファのメモリのみ。追加のメモリは必要ない。
- 柔軟性 - オプションフィールドを介した前方および後方互換性
- わずかなコードフットプリント
- 強い型付け - ランタイム時でなくコンパイル時に捕捉されるエラー
- 利便性 - 生成されたC++ヘッダーを介した簡潔なコード。必要に応じてランタイム時に効率良くスキーマとJSONライクな表現をパースするオプション機能 (他のJSONパーサよりも高速で優れたメモリ効率)
- クロスプラットフォーム: C++で、STLを除いて他に依存しないよう書かれており、C++コンパイラのある任意のプラットフォームで使える。現在のところ、Android、Linux、Windows、OSX用のライブラリの構築方法および使用例が含まれている。
Protocol buffersやJSONのパースといった他のソリューションと比べてFlatBuffersの良いところは、オーバーヘッドが少ないところであり、これは特にパースが不要であるおかげだ。
C++でFlatBuffersを使うには、次のようなステップをとることになる。
- 特定のDSLを使ってスキーマファイルを生成する。
- スキーマコンパイラを使ってC++ヘッダーファイルを生成する。
- 生成されたヘッダーファイルをプログラムにインクルードする (flatbuffers/flatbuffers.hファイルもパスに含まれている必要がある)。
- FlatBufferBuilderクラス (フラットなバイナリバッファを構築する) を使ってデータを読み書きする。
ディスカッショングループにおける初期の議論からも明らかなように、まだ少し荒削りなところがある。Javaのサポートも現段階では実験的だ。C#サポートは最も人気のあるリクエストの1つであり、次のリリースではサポートされるかもしれない。
FlatBuffersについてもっと学びたければ、ドキュメントを参照しよう。