flatbuffers

https://github.com/google/flatbuffers



什么是序列化?
首先网络传输的本质决定了我们在进行数据传输的时候需要序列化.
序列化: 把对象转化为一段buffer, obj—->buf
反序列化:把buffer转化为一个对象 buf—>obj
简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!
常用的序列化还有:protobuf,json
Google Flatbuffer介绍
FlatBuffers为Google发布的一个跨平台,提供多种语言接口,注重性能和资源使用的序列化类库。目前该类库提供C++, C#, C, Go, Java, JavaScript, PHP, and Python语言接口。该序列化类库多用于移动端手游数据传输以及特定的对性能有较高要求的应用。
它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输,而不需要任何解析开销。
优点:
• 不需要解析/解包就可以访问序列化数据 —- FlatBuffers的不同之处在于,它在一个平面二进制缓冲区中表示分层数据,这样就可以直接访问它,而不需要解析/解包,同时仍然支持数据结构的演化(向前/向后兼容)。
• 内存效率和速度 —- 访问数据时唯一内存需求就是缓冲区,不需要额外的内存分配。
• 扩展性、灵活性 —– 它支持的可选字段意味着不仅能获得很好的前向/后向兼容性。
• 最小代码依赖 —– 仅仅需要自动生成的少量代码和一个单一的头文件依赖,很容易集成到现有系统中。
• 强类型设计 —- 尽可能使错误出现在编译期。而不是等到运行期才手动检查和修正。
• 使用简单—— 生成的C++代码提供了简单的访问和构造接口;而且如果需要,通过一个可选功能可以用来在运行时高效解析Schema和类JSON格式的文本;
• 跨平台 —– 支持C++11、Java,而不需要任何依赖库;在最新的gcc、clang、vs2010等编译器上工作良好;



https://zhuanlan.zhihu.com/p/77644854


Category storage