快來看看Google出品的Protocol Buffer若治,別只會用Json和XML了


前言

  • 習(xí)慣用 Json慨蓝、XML 數(shù)據(jù)存儲格式的你們,相信大多都沒聽過Protocol Buffer
  • Protocol Buffer 其實 是 Google出品的一種輕量 & 高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式直砂,性能比 Json菌仁、XML 真的強(qiáng)!太静暂!多济丘!

由于 Google出品,我相信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

  1. Google 出品 (開源)
  2. Protocol Buffer 目前有兩個版本:proto2proto3
  3. 因為proto3 還是beta 版蜡秽,所以本次講解是 proto2

2. 作用

通過將 結(jié)構(gòu)化的數(shù)據(jù) 進(jìn)行 串行化(序列化),從而實現(xiàn) 數(shù)據(jù)存儲 / RPC 數(shù)據(jù)交換的功能

  1. 序列化: 將 數(shù)據(jù)結(jié)構(gòu)或?qū)ο?轉(zhuǎn)換成 二進(jìn)制串 的過程
  2. 反序列化:將在序列化過程中所生成的二進(jìn)制串 轉(zhuǎn)換成 數(shù)據(jù)結(jié)構(gòu)或者對象 的過程

3. 特點(diǎn)

  • 對比于 常見的 XML缆镣、Json 數(shù)據(jù)存儲格式芽突,Protocol Buffer有如下特點(diǎn):
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 BufferXML、Json 更小力细、更快睬澡、使用 & 維護(hù)更簡單!


5. 序列化原理解析

  • 序列化的本質(zhì):對數(shù)據(jù)進(jìn)行編碼 + 存儲
  • Protocol Buffer的性能好:傳輸效率快眠蚂,主要原因 = 序列化速度快 & 序列化后的數(shù)據(jù)體積小煞聪,其原因如下:
  1. 序列化速度快的原因:
    a. 編碼 / 解碼 方式簡單(只需要簡單的數(shù)學(xué)運(yùn)算 = 位移等等)
    b. 采用 PB 自身的框架代碼 和 編譯器 共同完成

  2. 序列化后的數(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 的流程如下:

Protocol Buffer使用流程

下面,我將對流程中的每個流程進(jìn)行詳細(xì)講解静陈。

6.1 環(huán)境配置

至此, Protocol Buffer已經(jīng)安裝完成鲸拥。下面將講解如何具體使用Protocol Buffer


6.2 構(gòu)建 Protocol Buffer 消息對象模型

  • 構(gòu)建步驟具體如下:
構(gòu)建步驟

至此, 關(guān)于Protocol Buffer的語法 & 如何構(gòu)建Protocol Buffer 消息對象模型講解完畢刑赶。下面將繼續(xù)講解如何具體使用Protocol Buffer


6.3 應(yīng)用到具體平臺(Android平臺)

  • 終于到了應(yīng)用到具體平臺項目中的步驟了捏浊。

此處以 Android平臺 為例

  • 具體步驟如下:
具體步驟

至此, 關(guān)于Protocol Buffer的使用講解完畢撞叨。下面將講解Protocol Buffer的源碼分析


7. 源碼分析

7.1 核心分析

在下面的源碼分析中金踪,主要分析的是:

  1. Protocol Buffer具體是如何進(jìn)行序列化 & 反序列化 ?
  2. XML牵敷、Json 相比热康,Protocol Buffer 序列化 & 反序列化速度 為什么如此快 & 序列化后的數(shù)據(jù)體積這么小劣领?

本文主要講解Protocol BufferAndroid 平臺上的應(yīng)用,即 Java
平臺

7.2 具體描述

具體的源碼分析請看文章:Android:手把手帶你分析 Protocol Buffer使用 源碼

至此铁材,關(guān)于 Protocol Buffer的所有內(nèi)容講解完畢尖淘,含介紹、特點(diǎn)著觉、具體使用村生、源碼分析、序列化原理等等饼丘。


8. 總結(jié)

  • 傳輸數(shù)據(jù)量較大的需求場景下趁桃,Protocol BufferXML、Json 更小肄鸽、更快卫病、使用 & 維護(hù)更簡單!
  • 下面用 一張圖 總結(jié)在 Android平臺中使用 Protocol Buffer 的整個步驟流程:
總結(jié)

歡迎關(guān)注Carson_Ho的簡書

不定期分享關(guān)于安卓開發(fā)的干貨裆甩,追求短冗锁、平、快嗤栓,但卻不缺深度冻河。


請點(diǎn)贊!因為你的鼓勵是我寫作的最大動力抛腕!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芋绸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子担敌,更是在濱河造成了極大的恐慌摔敛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件全封,死亡現(xiàn)場離奇詭異马昙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刹悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門行楞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人土匀,你說我怎么就攤上這事子房。” “怎么了就轧?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵证杭,是天一觀的道長。 經(jīng)常有香客問我妒御,道長解愤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任乎莉,我火速辦了婚禮送讲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惋啃。我一直安慰自己哼鬓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布边灭。 她就那樣靜靜地躺著魄宏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪存筏。 梳的紋絲不亂的頭發(fā)上宠互,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天味榛,我揣著相機(jī)與錄音,去河邊找鬼予跌。 笑死搏色,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的券册。 我是一名探鬼主播频轿,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烁焙!你這毒婦竟也來了航邢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤骄蝇,失蹤者是張志新(化名)和其女友劉穎膳殷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體九火,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赚窃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岔激。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勒极。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虑鼎,靈堂內(nèi)的尸體忽然破棺而出辱匿,到底是詐尸還是另有隱情,我是刑警寧澤炫彩,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布掀鹅,位于F島的核電站,受9級特大地震影響媒楼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戚丸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一划址、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧限府,春花似錦夺颤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至署穗,卻和暖如春寥裂,著一層夾襖步出監(jiān)牢的瞬間嵌洼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工封恰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麻养,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓诺舔,卻偏偏與公主長得像鳖昌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子低飒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容