2023-06-07
原文作者:Carson 原文地址:https://blog.csdn.net/carson_ho/category_9272167.html

前言

  • 习惯用 Json、XML 数据存储格式的你们,相信大多都没听过Protocol Buffer
  • Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json、XML 真的强!太!多!

由于 Google出品,我相信Protocol Buffer已经具备足够的吸引力

  • 今天,我将献上一份全面 & 详细的 Protocol Buffer攻略,含介绍、特点、具体使用、源码分析、序列化原理等等,希望您们会喜欢。

目录

202306072045018332.png


1. 定义

一种 结构化数据 的数据存储格式(类似于 XML、Json

  1. Google 出品 (开源)
  2. Protocol Buffer 目前有两个版本:proto2proto3
  3. 因为proto3 还是beta 版,所以本次讲解是 proto2

2. 作用

通过将 结构化的数据 进行 串行化( 序列化 ),从而实现 数据存储 / RPC 数据交换 的功能

  1. 序列化: 将 数据结构或对象 转换成 二进制串 的过程
  2. 反序列化:将在序列化过程中所生成的二进制串 转换成 数据结构或者对象 的过程

3. 特点

  • 对比于 常见的 XML、Json 数据存储格式,Protocol Buffer有如下特点:

202306072045028663.png


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 的流程如下:

202306072045039344.png

下面,我将对流程中的每个流程进行详细讲解。

6.1 环境配置

至此, Protocol Buffer已经安装完成。下面将讲解如何具体使用Protocol Buffer


6.2 构建 Protocol Buffer 消息对象模型

  • 构建步骤具体如下:

202306072045050425.png

至此, 关于Protocol Buffer的语法 & 如何构建Protocol Buffer 消息对象模型讲解完毕。下面将继续讲解如何具体使用Protocol Buffer


6.3 应用到具体平台(Android平台)

  • 终于到了应用到具体平台项目中的步骤了。

此处以 Android平台 为例

  • 具体步骤如下:

202306072045057786.png

至此, 关于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的所有内容讲解完毕,含介绍、特点、具体使用、源码分析、序列化原理等等。

阅读全文