FlatBuffers的编译与构建
[TOC]
文章参考:https://google.github.io/flatbuffers/usergroup0.html
概述
文章参考:https://google.github.io/flatbuffers/index.html#flatbuffers_overview
FlatBuffers 是一个序列化开源库,实现了与 Protocol Buffers,Thrift,Apache Avro,SBE 和 Cap’n Proto 类似的序列化格式,主要由 Wouter van Oortmerssen 编写,并由 Google 开源。Oortmerssen 最初为 Android 游戏和注重性能的应用而开发了FlatBuffers。现在它具有C ++,C#,C,Go,Java,PHP,Python 和 JavaScript 的端口。
FlatBuffer 是一个二进制 buffer,它使用 offset 组织嵌套对象(struct,table,vectors,等),可以使数据像任何基于指针的数据结构一样,就地访问数据。然而 FlatBuffer 与大多数内存中的数据结构不同,它使用严格的对齐规则和字节顺序来确保 buffer 是跨平台的。此外,对于 table 对象,FlatBuffers 提供前向/后向兼容性和 optional 字段,以支持大多数格式的演变。
FlatBuffers 的主要目标是避免反序列化。这是通过定义二进制数据协议来实现的,一种将定义好的将数据转换为二进制数据的方法。由该协议创建的二进制结构可以 wire 发送,并且无需进一步处理即可读取。相比较而言,在传输 JSON 时,我们需要将数据转换为字符串,通过 wire 发送,解析字符串,并将其转换为本地对象。Flatbuffers 不需要这些操作。你用二进制装入数据,发送相同的二进制文件,并直接从二进制文件读取。
尽管 FlatBuffers 有自己的接口定义语言来定义要与之序列化的数据,但它也支持 Protocol Buffers 中的 .proto
格式。
在 schema 中定义对象类型,然后可以将它们编译为 C++ 或 Java 等各种主流语言,以实现零开销读写。FlatBuffers 还支持将 JSON 数据动态地分析到 buffer 中。
除了解析效率以外,二进制格式还带来了另一个优势,数据的二进制表示通常更具有效率。我们可以使用 4 字节的 UInt 而不是 10 个字符来存储 10 位数字的整数。
它在 Apache 许可证 v2 下以开源形式在GitHub 上提供(请参阅 LICENSE.txt)。
优点
源码编译
Building with CMake
源码下载:https://github.com/google/flatbuffers
我们下载下载的版本:https://github.com/google/flatbuffers/releases/tag/v22.10.26
下载的本地目录:/Users/frewen/03.ProgramSpace/15.CLang/03.Source/flatbuffers-22.10.26
编译步骤:
我们先基于MacOS环境进行编译:
1 | 进入下载的源码目录: |
测试安装的环境:
1 | 查看版本号 |