快來看看Google出品的Protocol Buffer,別只會(huì)用Json和XML了


前言

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

由于 Google出品,我相信Protocol Buffer已經(jīng)具備足夠的吸引力

  • 今天,我將獻(xiàn)上一份全面 & 詳細(xì)的 Protocol Buffer攻略,含介紹、特點(diǎn)、具體使用、源碼分析、序列化原理等等,希望您們會(huì)喜歡。

Carson帶你學(xué)序列化Protocol Buffer系列文章
快來看看Google出品的Protocol Buffer,別只會(huì)用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ù)存儲(chǔ)格式(類似于 XML、Json

  1. Google 出品 (開源)
  2. Protocol Buffer 目前有兩個(gè)版本:proto2proto3
  3. 因?yàn)?code>proto3 還是beta 版,所以本次講解是 proto2

2. 作用

通過將 結(jié)構(gòu)化的數(shù)據(jù) 進(jìn)行 串行化(序列化),從而實(shí)現(xiàn) 數(shù)據(jù)存儲(chǔ) / 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ù)存儲(chǔ)格式,Protocol Buffer有如下特點(diǎn):
Protocol Buffer 特點(diǎn)

4. 應(yīng)用場景

傳輸數(shù)據(jù)量大 & 網(wǎng)絡(luò)環(huán)境不穩(wěn)定 的數(shù)據(jù)存儲(chǔ)、RPC 數(shù)據(jù)交換 的需求場景

如 即時(shí)IM (QQ、微信)的需求場景


總結(jié)

傳輸數(shù)據(jù)量較大的需求場景下,Protocol BufferXML、Json 更小、更快、使用 & 維護(hù)更簡單!


5. 序列化原理解析

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

  2. 序列化后的數(shù)據(jù)量體積小(即數(shù)據(jù)壓縮效果好)的原因:
    a. 采用了獨(dú)特的編碼方式,如VarintZigzag編碼方式等等
    b. 采用T - L - V 的數(shù)據(jù)存儲(chǔ)方式:減少了分隔符的使用 & 數(shù)據(jù)存儲(chǔ)得緊湊

更加詳細(xì)的介紹,請看文章:Protocol Buffer 序列化原理大揭秘 - 為什么Protocol Buffer性能這么好?

至此, 關(guān)于Protocol Buffer的序列化原理講解完畢。下面將繼續(xù)講解如何具體使用Protocol Buffer


6. 使用步驟 & 實(shí)例講解

使用 Protocol Buffer 的流程如下:

Protocol Buffer使用流程

下面,我將對流程中的每個(gè)流程進(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)用到具體平臺(tái)(Android平臺(tái))

  • 終于到了應(yīng)用到具體平臺(tái)項(xiàng)目中的步驟了。

此處以 Android平臺(tái) 為例

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

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


7. 源碼分析

7.1 核心分析

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

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

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

7.2 具體描述

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

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


8. 總結(jié)

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

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

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


請點(diǎn)贊!因?yàn)槟愕墓膭?lì)是我寫作的最大動(dòng)力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容