什么是所謂的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
修飾了,事實也是如此。
- 從上述代碼種的
-