zoukankan      html  css  js  c++  java
  • 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修饰了,事实也是如此。
  • 相关阅读:
    数据库事务之不可重复读
    数据库事务与脏读
    图结构代码实现
    哈希表与散列函数
    数据库表设计与视图
    B树和B+树
    java之字符串中查找字串的常见方法
    剑指 Offer 15. 二进制中1的个数——JS
    剑指 Offer 03. 数组中重复的数字——JS
    算法设计与分析——排序
  • 原文地址:https://www.cnblogs.com/HelloGreen/p/11711212.html
Copyright © 2011-2022 走看看