ProtoBuffer学习总结

什么是所谓的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修饰了,事实也是如此。
原文地址:https://www.cnblogs.com/HelloGreen/p/11711212.html