前言
- 習慣用
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 核心分析
在下面的源碼分析中,主要分析的是:
1. Protocol Buffer
具體是如何進行序列化 & 反序列化 ?
2. 與 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
的系列文章請看: