protocol buffer

天刚刚破晓發表於2024-05-10

Google protocol buffer 使用的意義: 在不使用的情況下,通常我們需要完成兩個部分,一個是writter一個是reader。writter負責向磁碟寫入訊息,reader負責讀出訊息,如果是定長資料且writter和reader都採用c++編寫則會比較方便,採用同樣的結構體就行。對於不定長資料稍微麻煩一點,需要定義一個個數,然後再按照約定逐個讀取。如果reader才用的是java,則需要先將資料存到一個buffer中,然後再根據約定逐個讀取欄位。每當我們定義一個訊息,我們都要去實現一個reader,這非常繁瑣。

關鍵字

  1. Message : 類似strut
  2. Required: 必須設定該欄位
  3. optional:不設定該欄位使用預設值,預設值可以自己設定也可以系統提供,數值型別為0,布林型別為false,字元型別為空
  4. repeated:該欄位可能會重複任意次(包括零次)
  5. = 1:標籤數字,表示該欄位在序列化之後的二進位制資料中的佈局位置,不可以重複,1-15在編碼時可以得到最佳化使標籤值和型別資訊只佔一個byte,16-2047將佔兩個。
  6. Enum :和c++一樣,需要注意的是 列舉值之間的分隔符是分號
  7. Import :類似python,可以匯入別的檔案,然後使用裡面定義的message
  8. package:包名對應生成c++檔案的名稱空間

還有一些option的設定,就是一些命令幫助生成更符合我們要求的目標語言程式碼,eg:option optimize_for = SPEED; 表示生成程式碼效率優先。具體用到了在看吧。

型別對照表

image

相關文章