快来看看Google出品的Protocol Buffer,别只会用Json和XML了


前言

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

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

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

Carson带你学序列化Protocol Buffer系列文章
快来看看Google出品的Protocol Buffer,别只会用Json和XML了
Carson带你学序列化:手把手教你如何安装Protocol Buffer
Carson带你学序列化:全面详解ProtocolBuffer语法
Carson带你学序列化:Google出品的序列化神器Protocol Buffer该怎么用?
Carson带你学序列化:Protocol Buffer序列化原理大揭秘-为什么性能这么好?
Carson带你学序列化:深入源码分析Protocol Buffer
Carson带你学序列化:深入分析JSON多种解析方式(Gson、AS自带org.json、Jackson)
Carson带你学序列化:深入分析XML多种解析方式(DOM、SAX、PULL)


目录

示意图

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 的整个步骤流程:
总结

欢迎关注Carson_Ho的简书

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度


请点赞!因为你的鼓励是我写作的最大动力!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容