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修飾了,事實也是如此。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM