FlatBuffers学习笔记二

FlatBuffers学习笔记二

一.为什么要使用FlatBuffers

在传输数据的过程中,无论是使用xml,html,还是json等,最终都是直接对数据进行操作。在这中间都存在编码和解码的过程,

然而FlatBuffers是直接对数据进行操作,仅仅增加了VTable和偏移量两个实体

FlatBuffers的特点:简单,高效,便利。

简单:————首先定义好协议文件(schema),然后使用工具编译成源码文件,就可以直接调用源码的接口来操作数据。

效率高:————FlatBuffers数据在缓冲区内都是平整的,可以直接访问,

便利:————FlatBuffers的协议文件设计好后就可以直接发布,任何人拿到这个协议都可以编译成源码来对数据进行操作,这对团队开发很有利,另外,FlatBuffers不用担心协议文件设计不周全的问题,因为你可以随便在table中添加或者删除成员。

二.为什么不使用FlatBuffers

  1. 效率虽然高,但是太消耗内存;
  2. FlatBuffers传输的数据较大;
  3. FlatBuffers打包后其中的矢量数据不能随意的修改;
  4. FlatBuffers的union类型不支持大于256哥类型,
  5. FlatBuffers传输数据没有json,xml,html等那么直观,

三.FlatBuffers详解

FlatBuffers其实就是一个保存了一系列标量矢量的缓冲区,其中的标量矢量可以直接访问。但是,如果一旦数据缓冲区构建成功,就不能随便修改其中的矢量,除非矢量长度不大于构造时的长度,且矢量保存的不是【偏移量,否则会产生错误。

3.1标量

所有的整型变量和浮点变量都是标量,长度是固定的,

FlatBuffers中的偏移量也是标量,所以在构造后不能随便修改,
struct结构也可以当做标量来看待。

3.2矢量

字符串和数组是矢量,字符串是以‘\0’结尾的,矢量的开头必须是一个32位的长度,用来指明矢量的长度,这个长度不包括‘\0’和长度本身所占的空间。

四.数据结构

struct————是不可更改的结构;(访问速度快,不可占用内存小);

table————可以随意增加或者删除成员,是一个灵活的类型,

root type————一个顶级类型,

union————是一个重要的类型,是封包分支的重要方法。

如果想要支持大于256个类型,必须通过union+table+union这个方式来扩充;如下:


//第二层union

table T2_1_t{//分支1

A1:int;


}

table T2_2_t{//分支2

A2:int;

}

union U2_1_t{
T2_1_t,
T2_1_t
}

table T2_3_t{//分支3

A3:int;

}

table T2_4_t{//分支4

A4:int;

}

union U2_2_t{

T2_3_t,
T2_4_t

}

//第一层union
table T1_1_t{
 u:U2_1_t(id:1);//注意,由于union的类型占一个id,所以这里是1,不是0,0已经默认分配给type了

}

table T1_2_t{
 u:U2_2_t(id:1);//注意,由于union的类型占一个id,所以这里是1,不是0,0已经默认分配给type了

}

union U1_1_t{//可以至少支持多达256*256=65536个消息分支

T1_1_t,

T1_2_t

}
//应用,这个Table可以至少支持多达256*256=65536种内容

table T_t{
u:U1_1_t(id:1);//注意,由于union的类型占一个id,所以这里是1,不是0,0已经默认分配给type了
}

总结:

FlatBuffers构造数据总的来说有两种,标量和矢量(即固定长度数据和可变长度数据)

参考:

http://pan.baidu.com/s/1pJWZ8L1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值