美文网首页Android开发集锦AndroidAndroid开发干货集中营
快来看看Google出品的Protocol Buffer,别只会

快来看看Google出品的Protocol Buffer,别只会

作者: Carson带你学安卓 | 来源:发表于2017-03-27 21:49 被阅读12583次

前言

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

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

相关文章阅读
Android开发:最全面、最易懂的Android屏幕适配解决方案
Android事件分发机制详解:史上最全面、最易懂
Android开发:史上最全的Android消息推送解决方案
Android开发:最全面、最易懂的Webview详解
Android开发:JSON简介及最全面解析方法!
Android四大组件:Service服务史上最全面解析
Android四大组件:BroadcastReceiver史上最全面解析


欢迎关注Carson_Ho的简书!

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

相关文章

网友评论

  • 小宁静致远:很详细, 谢谢!
  • Howborn:不错不错
  • RichardZhou:文章写的不错,思路很清晰。最近有个项目传输数据量比较大,所以也在研究使用Protocol Buffer。Protocol Buffer优势很明显,缺点也太明显。安装搭建环境和idea集成,对比json引入一个依赖完事真的太复杂;语法虽然简单,但还是有一定的学习成本,数据可读性也比较差,试想你做一个公用的RPC接口,接入方很多,大家都要花上半天一天的来学习安装Protocol Buffer,蛋好疼。所以我认为数据量不大没必要用的时候还是用json比较好。
  • 张鸣筝:赞赞赞
  • 键盘走过的日子:proto3的语法种,变量修饰符好像可以省略了。
  • dd2d9ac35e3f:这么良心这么棒,狂点赞!!!
    最近写分布式系统用到Protocol Buffer,谢谢啦!!!!
    dd2d9ac35e3f:对数组的传输处理,没有写~~~lz有空可以补上。
  • 石器时代小古董:非常详细,受教了
  • 18ce9f6925e6:看了半天还是不知道是啥?例子数据呢?
  • huangwenq:先收藏了 另外好像.proto基本数据类型这张表中的第二个int32类型应该是sint32
  • 人失格:在项目有小范围使用 就是可读性不是很好,后台强制使用,数据量不大 感觉性能有多快感触不深
    Carson带你学安卓: @人失格 可读性不好是它的缺点
    pbuffer在数据量大的时候优势才显示
  • bravian:不错,赞,写的非常详细,不过我觉得应用 proto buffer 的必要性不是很大。
    bravian: @撞灰 考虑是否采用新技术还要考虑风险和机会成本
    4e17bf2e0478:新技术确实会让人望而却步
    Carson带你学安卓: @bravian 当数据量很大的时候,必要性就很大了~
  • 好翊:受教了
  • 5925d5123ff6:Carson_Ho 你好,我把此文章放到了 linkedinfo.co ,我的一个业余项目。如您觉得不妥,请随时联系我将之撤下。

    linkedinfo.co 是一个集合了各类优秀技术文章的站点,不展现全文,所有条目都附上作者与原文链接,读者最终都会进入到作者原文的站点。做 linkedinfo 的初衷是想方便自己且方便其他想学习的朋友,能更方便地找到自己感兴趣的技术文章。同时这也是一个我自己练习的过程,比如将正在学习的 Semantic Web 技术应用到 linkedinfo 来更好地连接不同的知识。

    各位感兴趣的朋友可以去 https://linkedinfo.co 看看,非常希望能得到你们的意见与建议 (可在about 页面留言 https://linkedinfo.co/about )。
  • f3840705e687:写proto文件时用什么编辑器?可以格式化proto的。
    Carson带你学安卓: @鱼丸粗面_46cc 反正打开文本编辑器就好了
    f3840705e687:@Carson_Ho 这是当然,你每次写proto都是打开记事本?或者vim?
    Carson带你学安卓: @鱼丸粗面_46cc 文本编辑器都可以,最后改后缀名就行了
  • 勤息嘻嘻嘻:不明觉厉:+1:
  • 戴定康:呵呵:blush:
    戴定康:@Aesion 就
    戴定康:@Aesion 来来来

本文标题:快来看看Google出品的Protocol Buffer,别只会

本文链接:https://www.haomeiwen.com/subject/babmgttx.html