這是一份全面 & 詳細的Google序列化神器protocolBuffer 學習指南

Carson_Ho發表於2019-03-04

前言

  • 習慣用 Json、XML 資料儲存格式的你們,相信大多都沒聽過Protocol Buffer
  • Protocol Buffer 其實 是 Google出品的一種輕量 & 高效的結構化資料儲存格式,效能比 Json、XML 真的強!太!多!

由於 Google出品,我相信Protocol Buffer已經具備足夠的吸引力

  • 今天,我將獻上一份全面 & 詳細的 Protocol Buffer攻略,含介紹、特點、具體使用、原始碼分析、序列化原理等等,希望您們會喜歡。

目錄

示意圖

1. 定義

一種 結構化資料 的資料儲存格式(類似於 XML、Json

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

2. 作用

通過將 結構化的資料 進行 序列化(序列化),從而實現 資料儲存 / RPC 資料交換的功能

  1. 序列化: 將 資料結構或物件 轉換成 二進位制串 的過程
  2. 反序列化:將在序列化過程中所生成的二進位制串 轉換成 資料結構或者物件 的過程

3. 特點

  • 對比於 常見的 XML、Json 資料儲存格式,Protocol Buffer有如下特點:
Protocol Buffer 特點

4. 應用場景

傳輸資料量大 & 網路環境不穩定 的資料儲存、RPC 資料交換 的需求場景

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


總結

傳輸資料量較大的需求場景下,Protocol BufferXML、Json 更小、更快、使用 & 維護更簡單!


5. 序列化原理解析

  • 序列化的本質:對資料進行編碼 + 儲存
  • Protocol Buffer的效能好:傳輸效率快,主要原因 = 序列化速度快 & 序列化後的資料體積小,其原因如下:
  1. 序列化速度快的原因:
    a. 編碼 / 解碼 方式簡單(只需要簡單的數學運算 = 位移等等)
    b. 採用 PB 自身的框架程式碼 和 編譯器 共同完成

  2. 序列化後的資料量體積小(即資料壓縮效果好)的原因:
    a. 採用了獨特的編碼方式,如VarintZigzag編碼方式等等
    b. 採用T - L - V 的資料儲存方式:減少了分隔符的使用 & 資料儲存得緊湊

更加詳細的介紹,請看文章:Protocol Buffer 序列化原理大揭祕 – 為什麼Protocol Buffer效能這麼好?

至此, 關於Protocol Buffer的序列化原理講解完畢。下面將繼續講解如何具體使用Protocol Buffer


6. 使用步驟 & 例項講解

使用 Protocol Buffer 的流程如下:

Protocol Buffer使用流程

下面,我將對流程中的每個流程進行詳細講解。

6.1 環境配置

至此, Protocol Buffer已經安裝完成。下面將講解如何具體使用Protocol Buffer


6.2 構建 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 BufferAndroid 平臺上的應用,即 Java
平臺

7.2 具體描述

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

至此,關於 Protocol Buffer的所有內容講解完畢,含介紹、特點、具體使用、原始碼分析、序列化原理等等。


8. 總結

  • 傳輸資料量較大的需求場景下,Protocol BufferXML、Json 更小、更快、使用 & 維護更簡單!
  • 下面用 一張圖 總結在 Android平臺中使用 Protocol Buffer 的整個步驟流程:
總結
  • 關於Protocol Buffer的系列文章請看:
  1. 快來看看Google出品的Protocol Buffer,別隻會用Json和XML了
  2. 手把手教你如何安裝Protocol Buffer
  3. 這是一份很有誠意的 Protocol Buffer 語法詳解
  4. Protocol Buffer 序列化原理大揭祕 – 為什麼Protocol Buffer效能這麼好?
  5. Android:手把手帶你分析 Protocol Buffer使用 原始碼

請點贊!因為你的鼓勵是我寫作的最大動力!

相關文章