前言
- 習慣用
Json、XML
資料儲存格式的你們,相信大多都沒聽過Protocol Buffer
Protocol Buffer
其實 是Google
出品的一種輕量 & 高效的結構化資料儲存格式,效能比Json、XML
真的強!太!多!
由於
Protocol Buffer
已經具備足夠的吸引力
- 今天,我將獻上一份全面 & 詳細的
Protocol Buffer
攻略,含介紹、特點、具體使用、原始碼分析、序列化原理等等,希望您們會喜歡。
目錄
1. 定義
一種 結構化資料 的資料儲存格式(類似於 XML、Json
)
Protocol Buffer
目前有兩個版本:proto2
和proto3
- 因為
proto3
還是beta 版,所以本次講解是proto2
2. 作用
通過將 結構化的資料 進行 序列化(序列化),從而實現 資料儲存 / RPC 資料交換的功能
- 序列化: 將 資料結構或物件 轉換成 二進位制串 的過程
- 反序列化:將在序列化過程中所生成的二進位制串 轉換成 資料結構或者物件 的過程
3. 特點
- 對比於 常見的
XML、Json
資料儲存格式,Protocol Buffer
有如下特點:
4. 應用場景
傳輸資料量大 & 網路環境不穩定 的資料儲存、RPC 資料交換 的需求場景
如 即時IM (QQ、微信)的需求場景
總結
在 傳輸資料量較大的需求場景下,Protocol Buffer
比XML、Json
更小、更快、使用 & 維護更簡單!
5. 序列化原理解析
- 序列化的本質:對資料進行編碼 + 儲存
Protocol Buffer
的效能好:傳輸效率快,主要原因 = 序列化速度快 & 序列化後的資料體積小,其原因如下:
-
序列化速度快的原因:
a. 編碼 / 解碼 方式簡單(只需要簡單的數學運算 = 位移等等)
b. 採用PB
自身的框架程式碼 和 編譯器 共同完成 -
序列化後的資料量體積小(即資料壓縮效果好)的原因:
a. 採用了獨特的編碼方式,如Varint
、Zigzag
編碼方式等等
b. 採用T - L - V
的資料儲存方式:減少了分隔符的使用 & 資料儲存得緊湊
更加詳細的介紹,請看文章:Protocol Buffer 序列化原理大揭祕 – 為什麼Protocol Buffer效能這麼好?
至此, 關於Protocol Buffer
的序列化原理講解完畢。下面將繼續講解如何具體使用Protocol Buffer
6. 使用步驟 & 例項講解
使用 Protocol Buffer
的流程如下:
下面,我將對流程中的每個流程進行詳細講解。
6.1 環境配置
- 要使用
Protocol Buffer
,需要先在電腦上安裝Protocol Buffer
- 具體請看文章:手把手教你如何安裝Protocol Buffer
至此, Protocol Buffer
已經安裝完成。下面將講解如何具體使用Protocol Buffer
6.2 構建 Protocol Buffer
訊息物件模型
- 構建步驟具體如下:
- 下面將通過一個例項(
Android(Java)
平臺為例)詳細介紹每個步驟。 - 具體請看文章:這是一份很有誠意的 Protocol Buffer 語法詳解
至此, 關於Protocol Buffer
的語法 & 如何構建Protocol Buffer
訊息物件模型講解完畢。下面將繼續講解如何具體使用Protocol Buffer
6.3 應用到具體平臺(Android
平臺)
- 終於到了應用到具體平臺專案中的步驟了。
此處以
Android
平臺 為例
- 具體步驟如下:
至此, 關於Protocol Buffer
的使用講解完畢。下面將講解Protocol Buffer
的原始碼分析
7. 原始碼分析
7.1 核心分析
在下面的原始碼分析中,主要分析的是:
Protocol Buffer
具體是如何進行序列化 & 反序列化 ?- 與
XML、Json
相比,Protocol Buffer
序列化 & 反序列化速度 為什麼如此快 & 序列化後的資料體積這麼小?
本文主要講解
Protocol Buffer
在Android
平臺上的應用,即Java
平臺
7.2 具體描述
具體的原始碼分析請看文章:Android:手把手帶你分析 Protocol Buffer使用 原始碼
至此,關於 Protocol Buffer
的所有內容講解完畢,含介紹、特點、具體使用、原始碼分析、序列化原理等等。
8. 總結
- 在 傳輸資料量較大的需求場景下,
Protocol Buffer
比XML、Json
更小、更快、使用 & 維護更簡單! - 下面用 一張圖 總結在 Android平臺中使用
Protocol Buffer
的整個步驟流程:
- 關於
Protocol Buffer
的系列文章請看:
- 快來看看Google出品的Protocol Buffer,別隻會用Json和XML了
- 手把手教你如何安裝Protocol Buffer
- 這是一份很有誠意的 Protocol Buffer 語法詳解
- Protocol Buffer 序列化原理大揭祕 – 為什麼Protocol Buffer效能這麼好?
- Android:手把手帶你分析 Protocol Buffer使用 原始碼
- 下面我將繼續深入講解
Android
相關知識 ,有興趣可以繼續關注Carson_Ho的安卓開發筆記