flatBuffer安装及使用教程

1、什么是flatBuffer:

FlatBuffers为Google发布的一个跨平台,提供多种语言接口,注重性能和资源使用的序列化类库。目前该类库提供C++, C#, C, Go, Java, JavaScript, PHP, and Python语言接口。该序列化类库多用于移动端手游数据传输以及特定的对性能有较高要求的应用。
接下来我们将学习FlatBuffers环境搭建并且使用PHP语言完成一次简单的序列化例子。

  • 编译flatc工具
  • 编写一个FlatBuffers的scheme文件
  • 使用flatc工具编译scheme文件,生成对应语言的数据对象头文件/类
  • 使用FlatBufferBuilder序列化对象
  • 反序列化数据对象

2、安装:

编译工具flatc工具,首先要先装Cmake(推荐apt-get install cmake)

2.1、下载FlatBuffers源码,从gitHub上下载项目源代码:

git clone https://github.com/google/flatbuffers.git

2.2、进入flatbuffers项目根目录,输入如下命令

cmake -G “Unix Makefiles” //生成MakeFile
make //生成flatc
make install //安装flatc

2.3、查看flatc,进入flatbuffers项目根目录

./flatc --version

3、编写FlatBuffers的scheme文件:

namespace com.zeyuan.learning;
enum Color:byte { Red = 0, Green, Blue = 2 }
union Equipment { Weapon } // Optionally add more tables.
struct Vec3 {
	x:float;
	y:float;
	z:float;
}
table Monster {
	pos:Vec3; // Struct.
	mana:short = 150;
	hp:short = 100;
	name:string;
	friendly:bool = false (deprecated);
	inventory:[ubyte];  // Vector of scalars.
	color:Color = Blue; // Enum.
	weapons:[Weapon];   // Vector of tables.
	equipped:Equipment; // Union.
}
table Weapon {
	name:string;
	damage:short;
}
root_type Monster;

4、编译Schema文件:

将上节编写的scheme文件保存为test.fbs文件,到该文件所在文件夹下,执行

flatc [ GENERATOR OPTIONS ] [ -o PATH ] [ -I PATH ] [ -S ] FILES… [ – FILES…]

定义文件按照顺序被读取和编译,还可以包含其他定义文件和数据(详情 见下面).
任意个定义文件可能生成一个或者多个定义文件,这取决于附加的命令选项

–cpp,-c :按照定义生成C++头文件

–java,-j :按照定义生成Java代码

–csharp,-n :按照定义生成C#代码

–go,-g :按照定义生成Go代码

–python,-p :按照定义生成python打底吗

–javascript,-s :按照定义生成JavaScript

–php :按照定义生成php

数据序列化格式选项

–binary,-b :序列化成.bin 后缀的二进制格式,

–json,-t :序列化成.json 后缀的json格式,

其他选项

-o PATH :输出搜有生成的文件到Path(绝对路径,或者相对于当前目录)路径,如果省略,Path就是当前目录.路径末尾因该是你的系统分隔符\或者/.

-I PATH :当遇见include声明,试图读取文件的时候将从此路径按照顺序查找,如果失败,就按照相对路径查找

-M :打印Make规则到生成文件

–strict-json :要求生成严格的json文件(名字等字段包含在引号中,table和Vector末尾没有逗号),默认 在required/generated时没有引号,末尾逗号是允许的

—defaults-json :当输出json文件本的时候输出字段等于默认值

—no-prefix :当生成C++头文件时 枚举值不包含枚举类型的前缀

—scoped-enums :使用C++11风格作用域和强类型枚举生成C++,也就意味着 --no-prefix

—no-includes :不生成包含include模式的代码,(依赖C++)

—gen-mutable :为可变的FlatBuffers生成额外的non-const访问器

—gen-onefile :生成一个定义文件(用于C#)

例如执行以下代码:

./flatc --gen-object-api --go test.fbs

5、编译问题

declaration of ‘<whatever>’ shadows a member of ‘this’ [-Werror=shadow]

如果编译报上面这个问题

解决链接:https://github.com/google/flatbuffers/issues/287

可以checkout到v1.12.0这个版本进行编译就不会出现这种问题了

6、参考链接

https://blog.51cto.com/onebig/2122019

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值