美文网首页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的语法种,变量修饰符好像可以省略了。
      • 小脆猪:这么良心这么棒,狂点赞!!!
        最近写分布式系统用到Protocol Buffer,谢谢啦!!!!
        小脆猪:对数组的传输处理,没有写~~~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