1、背景
因工作之余,需要替换替换底层序列化协议,最终考虑,选择了 FlatBuffers。学习协议框架最好的方式就是直接去看官方文档(
FlatBuffers: FlatBuffers)。替换过程中,也对这协议有了一些理解,想着记录下,那就开始吧。
2、FlatBuffers 优缺点
这不,看了下官方文档,总结下这 FaltBuffers 的一些优缺点:
优点:
- 解码速度极快,将序列化数据存储在缓存中,这些数据既可以写出至文件中,又可以通过网络原样传输,也可直接读取而没有任何解析开销,访问数据时的唯一内存需求就是缓冲区,不需要额外的内存分配。
- 扩展性、灵活性:它支持的可选字段意味着具有很好的前向/后向兼容。FlatBuffers 支持选择性地写入数据成员,这不仅为某一个数据结构在应用的不同版本之间提供了兼容性,同时还能使程序员灵活地选择是否写入某些字段及灵活地设计传输的数据结构。
- 跨平台:支持 C++11、Java,而不需要任何依赖库,在最新的 gcc、clang、vs2010 等编辑器上也工作良好。使用简单方便 ,仅仅需要自动生成的少量代码和一个单一的头文件依赖,很容易集成到现有系统中,生成的 C++ 代码提供了简单的访问和构造接口,可以兼容 Json 等其他格式的解析。
缺点:
- 数据无可读性,必须进行数据可视化才能理解数据。
- 向后兼容性局限,在 schema 中添加或删除字段必须小心,可以通过标识 deprecated(废弃标志)来标识字段,不建议人为手动的去直接移除字段,自己去调整类。
3、为啥选择了 FlatBuffers
- 考虑提升反序列化速度,原先使用的是 XML
- 考虑使用一个文件承载更多的内容,同时可以就地修改数据
- 考虑社区活跃度