# Flatbuffer 使用
flatbuffer是google发布的一个跨平台数据序列化框架,项目地址在 GitHub (opens new window) ,官方的文档在 这里 (opens new window)
具有如下特点
1、对序列化的数据不需要打包和拆包
2、内存和效率速度高,扩展灵活
3、代码依赖较少
4、强类型设计,编译期即可完成类型检查
5、使用简单、可跨平台使用,支持C++, C#, Go, Java, JavaScript, PHP, Python等语言
更多资料:
FlatBuffer优化数据传输效率 (opens new window)
FlatBuffer介绍和用法 (opens new window)
# Flatc 编译
下载地址 (opens new window),获取flatc_windows_exe.zip,解压后获得文件
flatc.exe
文件(cmake编译过,可直接使用)cd 到
flatc.exe
路径下( 如:cd C:\Users\zhengz\Desktop\flatc)编写Schema文件,文件名为
Person.fbs
namespace com.race604.fbs; enum FriendshipStatus: int {Friend = 1, NotFriend} table Person { name: string; friendshipStatus: FriendshipStatus = Friend; spouse: Person; friends: [Person]; } root_type Person;
运行命令,将
Person.fbs
转Java
// -j 生成Java结构、-b生成二进制结构 flatc -j -b Person.fbs
生成的文件和结构
└── com └── race604 └── fbs ├── FriendshipStatus.java └── Person.java
# 使用建议
通过前面的体验,FlatBuffers 几乎秒杀了 JSON,下面说说 FlatBuffers 的几点缺点:
- FlatBuffers 需要生成代码,对代码有侵入性;
- 数据序列化没有可读性,不方便 Debug;
- 构建 FlatBuffers 对象比较麻烦,不直观,特别是如果对象比较复杂情况下需要写大段的代码;
- 数据的所有内容需要使用 Schema 严格定义,灵活性不如 JSON。 所以,在什么情况下选择使用 FlatBuffers 呢?个人感觉需要满足以下几点:
- 项目中有大量数据传输和解析,使用 JSON 成为了性能瓶颈;
- 稳定的数据结构定义
# flatc.exe
基本很少需要,主动clone flatbuffer代码仓库,编译成flatc.exe
步骤流程:
git clone git@github.com:google/flatbuffers.git
cd flatbuffers
brew install cmake
cmake -G "Unix Makefiles"
make
make install
flatc --version