什么是所谓的Protobuffer
- google推出的一种数据交换的格式,主要用于制定协议的数据格式。
- 通俗的说,就是双方使用提前约定好的一个文件(这个文件规定了某种数据的结构是怎么样的,字段1是什么类型的数据,代表什么含义,如此类推)作为数据的参考格式,互相传输数据(即序列化和反序列)。
为什么使用ProtoBuffer
- 效率高(相比json,参考Protobuffer和json深度对比实验)
- 跨语言
- 提供了程序,方便从
Proto
文件直接生成编程中可实际使用的类文件 - 可自动生成序列化和反序列化的接口
ProtoBuffer使用
- 网上教程一大堆,而且学习起来简单易懂,不解释
曾经踩过的PB的坑
- 区分版本
- 有时候使用
proc.exe
小程序从.proto
文件生成代码文件时,会报错 - 注意观察错误提示,按照错误提示找到错误原因即可,往往是某些语法特性在新版本不支持了
- 有时候使用
- 因合法性检查失败解析pb失败
-
获取到的数据可能和声明的
.proto
文件的不吻合 -
.proto
文件声明为required
的字段,在合法性检查时会判断该字段是否有内容,如果没有内容则认为解析失败 -
解析是否失败,和终端是否进行合法性检查有关
-
进行合法性检查代码示例
bool MessagePB::IsInitialized() const { if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false; return true; }
- 从上述代码种的
0x00000007
可以推理出:该结构体有三个字段,都被required
修饰了,事实也是如此。
- 从上述代码种的
-