前言
- 習(xí)慣用
Json慨蓝、XML
數(shù)據(jù)存儲格式的你們,相信大多都沒聽過Protocol Buffer
-
Protocol Buffer
其實 是Google
出品的一種輕量 & 高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式直砂,性能比Json菌仁、XML
真的強(qiáng)!太静暂!多济丘!
由于
Protocol Buffer
已經(jīng)具備足夠的吸引力
- 今天洽蛀,我將獻(xiàn)上一份全面 & 詳細(xì)的
Protocol Buffer
攻略摹迷,含介紹、特點(diǎn)郊供、具體使用峡碉、源碼分析、序列化原理等等驮审,希望您們會喜歡鲫寄。
Carson帶你學(xué)序列化Protocol Buffer系列文章
快來看看Google出品的Protocol Buffer,別只會用Json和XML了
Carson帶你學(xué)序列化:手把手教你如何安裝Protocol Buffer
Carson帶你學(xué)序列化:全面詳解ProtocolBuffer語法
Carson帶你學(xué)序列化:Google出品的序列化神器Protocol Buffer該怎么用疯淫?
Carson帶你學(xué)序列化:Protocol Buffer序列化原理大揭秘-為什么性能這么好地来?
Carson帶你學(xué)序列化:深入源碼分析Protocol Buffer
Carson帶你學(xué)序列化:深入分析JSON多種解析方式(Gson、AS自帶org.json熙掺、Jackson)
Carson帶你學(xué)序列化:深入分析XML多種解析方式(DOM未斑、SAX、PULL)
目錄
1. 定義
一種 結(jié)構(gòu)化數(shù)據(jù) 的數(shù)據(jù)存儲格式(類似于 XML币绩、Json
)
Protocol Buffer
目前有兩個版本:proto2
和proto3
- 因為
proto3
還是beta 版蜡秽,所以本次講解是proto2
2. 作用
通過將 結(jié)構(gòu)化的數(shù)據(jù) 進(jìn)行 串行化(序列化),從而實現(xiàn) 數(shù)據(jù)存儲 / RPC 數(shù)據(jù)交換的功能
- 序列化: 將 數(shù)據(jù)結(jié)構(gòu)或?qū)ο?轉(zhuǎn)換成 二進(jìn)制串 的過程
- 反序列化:將在序列化過程中所生成的二進(jìn)制串 轉(zhuǎn)換成 數(shù)據(jù)結(jié)構(gòu)或者對象 的過程
3. 特點(diǎn)
- 對比于 常見的
XML缆镣、Json
數(shù)據(jù)存儲格式芽突,Protocol Buffer
有如下特點(diǎn):
4. 應(yīng)用場景
傳輸數(shù)據(jù)量大 & 網(wǎng)絡(luò)環(huán)境不穩(wěn)定 的數(shù)據(jù)存儲、RPC 數(shù)據(jù)交換 的需求場景
如 即時IM (QQ费就、微信)的需求場景
總結(jié)
在 傳輸數(shù)據(jù)量較大的需求場景下诉瓦,Protocol Buffer
比XML、Json
更小力细、更快睬澡、使用 & 維護(hù)更簡單!
5. 序列化原理解析
- 序列化的本質(zhì):對數(shù)據(jù)進(jìn)行編碼 + 存儲
-
Protocol Buffer
的性能好:傳輸效率快眠蚂,主要原因 = 序列化速度快 & 序列化后的數(shù)據(jù)體積小煞聪,其原因如下:
序列化速度快的原因:
a. 編碼 / 解碼 方式簡單(只需要簡單的數(shù)學(xué)運(yùn)算 = 位移等等)
b. 采用PB
自身的框架代碼 和 編譯器 共同完成序列化后的數(shù)據(jù)量體積小(即數(shù)據(jù)壓縮效果好)的原因:
a. 采用了獨(dú)特的編碼方式逝慧,如Varint
昔脯、Zigzag
編碼方式等等
b. 采用T - L - V
的數(shù)據(jù)存儲方式:減少了分隔符的使用 & 數(shù)據(jù)存儲得緊湊
更加詳細(xì)的介紹啄糙,請看文章:Protocol Buffer 序列化原理大揭秘 - 為什么Protocol Buffer性能這么好?
至此云稚, 關(guān)于Protocol Buffer
的序列化原理講解完畢隧饼。下面將繼續(xù)講解如何具體使用Protocol Buffer
6. 使用步驟 & 實例講解
使用 Protocol Buffer
的流程如下:
下面,我將對流程中的每個流程進(jìn)行詳細(xì)講解静陈。
6.1 環(huán)境配置
- 要使用
Protocol Buffer
燕雁,需要先在電腦上安裝Protocol Buffer
- 具體請看文章:手把手教你如何安裝Protocol Buffer
至此, Protocol Buffer
已經(jīng)安裝完成鲸拥。下面將講解如何具體使用Protocol Buffer
6.2 構(gòu)建 Protocol Buffer
消息對象模型
- 構(gòu)建步驟具體如下:
- 下面將通過一個實例(
Android(Java)
平臺為例)詳細(xì)介紹每個步驟拐格。 - 具體請看文章:這是一份很有誠意的 Protocol Buffer 語法詳解
至此, 關(guān)于Protocol Buffer
的語法 & 如何構(gòu)建Protocol Buffer
消息對象模型講解完畢刑赶。下面將繼續(xù)講解如何具體使用Protocol Buffer
6.3 應(yīng)用到具體平臺(Android
平臺)
- 終于到了應(yīng)用到具體平臺項目中的步驟了捏浊。
此處以
Android
平臺 為例
- 具體步驟如下:
- 更加詳細(xì)介紹請看文章:Android:手把手教你學(xué)會使用Google出品的序列化神器Protocol Buffer
至此, 關(guān)于Protocol Buffer
的使用講解完畢撞叨。下面將講解Protocol Buffer
的源碼分析
7. 源碼分析
7.1 核心分析
在下面的源碼分析中金踪,主要分析的是:
-
Protocol Buffer
具體是如何進(jìn)行序列化 & 反序列化 ? - 與
XML牵敷、Json
相比热康,Protocol Buffer
序列化 & 反序列化速度 為什么如此快 & 序列化后的數(shù)據(jù)體積這么小劣领?
本文主要講解
Protocol Buffer
在Android
平臺上的應(yīng)用,即Java
平臺
7.2 具體描述
具體的源碼分析請看文章:Android:手把手帶你分析 Protocol Buffer使用 源碼
至此铁材,關(guān)于 Protocol Buffer
的所有內(nèi)容講解完畢尖淘,含介紹、特點(diǎn)著觉、具體使用村生、源碼分析、序列化原理等等饼丘。
8. 總結(jié)
- 在 傳輸數(shù)據(jù)量較大的需求場景下趁桃,
Protocol Buffer
比XML、Json
更小肄鸽、更快卫病、使用 & 維護(hù)更簡單! - 下面用 一張圖 總結(jié)在 Android平臺中使用
Protocol Buffer
的整個步驟流程:
-
Carson帶你學(xué)序列化Protocol Buffer系列文章
快來看看Google出品的Protocol Buffer典徘,別只會用Json和XML了
Carson帶你學(xué)序列化:手把手教你如何安裝Protocol Buffer
Carson帶你學(xué)序列化:全面詳解ProtocolBuffer語法
Carson帶你學(xué)序列化:Google出品的序列化神器Protocol Buffer該怎么用蟀苛?
Carson帶你學(xué)序列化:Protocol Buffer序列化原理大揭秘-為什么性能這么好?
Carson帶你學(xué)序列化:深入源碼分析Protocol Buffer
Carson帶你學(xué)序列化:深入分析JSON多種解析方式(Gson逮诲、AS自帶org.json帜平、Jackson)
Carson帶你學(xué)序列化:深入分析XML多種解析方式(DOM幽告、SAX、PULL)
歡迎關(guān)注Carson_Ho的簡書
不定期分享關(guān)于安卓開發(fā)的干貨裆甩,追求短冗锁、平、快嗤栓,但卻不缺深度冻河。