# 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 编译

  1. 下载地址 (opens new window),获取flatc_windows_exe.zip,解压后获得文件 flatc.exe文件(cmake编译过,可直接使用)

  2. cd 到flatc.exe 路径下( 如:cd C:\Users\zhengz\Desktop\flatc)

  3. 编写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;  
    
  4. 运行命令,将 Person.fbsJava

    // -j 生成Java结构、-b生成二进制结构
    flatc -j -b Person.fbs
    

    生成的文件和结构

    └── com
        └── race604
            └── fbs
                ├── FriendshipStatus.java
                └── Person.java
    

# 使用建议

通过前面的体验,FlatBuffers 几乎秒杀了 JSON,下面说说 FlatBuffers 的几点缺点:

  1. FlatBuffers 需要生成代码,对代码有侵入性;
  2. 数据序列化没有可读性,不方便 Debug;
  3. 构建 FlatBuffers 对象比较麻烦,不直观,特别是如果对象比较复杂情况下需要写大段的代码;
  4. 数据的所有内容需要使用 Schema 严格定义,灵活性不如 JSON。 所以,在什么情况下选择使用 FlatBuffers 呢?个人感觉需要满足以下几点:
  5. 项目中有大量数据传输和解析,使用 JSON 成为了性能瓶颈;
  6. 稳定的数据结构定义

# 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
最后更新时间: 11/24/2021, 1:59:05 AM