简介
Flatbuffer 是一个高效的跨平台、支持多种语言序列化数据的库。最初由谷歌为游戏开发而开发的,现在也用于多种对性能要求严苛的应用中。FlatBuffer有以下优点(直接翻译官网文档,详细介绍看这里):
- 可不需要解析、拆包,而直接访问序列化后的数据;
- 内存利用率高以及读取速度快;
- 灵活性;
- 生成代码量小;
- 强类型;
- 使用方便;
- 代码跨平台无其他依赖。
关于使用方法就不多介绍了,对于源码编译、Schema的编译官网有详细介绍,点击这里可以了解更多使用方法。这里想介绍的是解析一个已经序列化的数据文件的方法。其实如果只是想要知道怎么使用FlatBuffer,这部分内容是没必要了解的,但是好奇心的驱使下,还是想一探究竟。这是一篇个人理解文章,如果想看官方介绍请戳这里。
闲言少叙,书归正传。
铺垫
为了便于理解,我在Ubuntu16.04下下载源码并编译出了FlatBuffer编译器flatc
, 通过--binary
选项将一个JSON
数据文件编译成一个二进制文件Monster.bin
,用到的Schema和数据如下:
Monster.fbs
// Example IDL file for our monster's schema.
namespace MyGame.Sample;
enum Color:byte { Red = 0, Green, Blue = 2 }
union Equipment { Weapon } // Optionally add more tables.
struct Vec3 {
x:float;
y:float;
z:float;
}
table Monster {
pos:Vec3; // Struct.
mana:short = 150;
hp:short = 30;
name:stri