Google protobuf是非常出色的开源工具,在项目中可以用它来作为服务间数据交互的接口,例如rpc服务、数据文件传输等。protobuf为proto文件中定义的对象提供了标准的序列化和反序列化方法,可以很方便的对pb对象进行各种解析和转换。以下是我总结的protobuf使用技巧和经验,分享给大家。由于公众号尚未开通评论功能,抱歉暂时还不能评论交流。

技巧1:使用optional而不是required字段。

protobuf的可选字段optional是一个很巧妙的设计,optional字段是可选的,一个optional字段存在与否都不影响proto对象的序列化和反序列化,利用它可以实现数据协议的向后兼容和向前兼容,即以后增加新的字段,或弃用(注意这里是弃用而不是删除)旧字段都不需要修改代码。

相比optional字段,requried字段要求字段必须存在,否则会导致proto解析失败。一旦某个字段被设计为requried类型,将来随着业务的快速发展可能会成为负担,因此在使用requried类型时一定要慎重。

技巧2:使用bytes而不是string字段。

这个技巧要感谢身边好同事的建议和提醒,protobuf的bytes和string都能表示字符串,但是string类型会对字符串做utf8格式校验,而bytes不会,因此使用bytes的编解码效率更高。

技巧3:尽可能只维护一份proto文件。

世界上唯一不变的事情就是永远在发生变化,精心设计好的proto文件也会随着业务发展而改变。因此,工程中不提倡拷贝分发proto文件,而应通过提供git地址的方式只维护一份proto文件。

技巧4:尽可能减少对其他proto文件的依赖。

proto应尽量独立,在某些编程语言如lua中是不支持proto中嵌套其他proto这种方式的,需要手动修改以剔除外部proto依赖,或采用其他办法解决。另外,减少对其他proto文件的依赖也有利于对proto的查看和理解。

技巧5:利用开源工具实现proto和json的转换。

protobuf的二进制可读性不好,远不如json的可读性,工程中有很多地方都会涉及proto和json之间的转换。假如你手头上有一个很好用的json开发接口,现在要实现proto和json之间的相互转换,一定要抵制住造轮子的冲动,而应该去找找json2pb这样的开源工具。开源工具只需要几行代码就能搞定这样的需求,又好又快,既能提高工作效率,又可以保证质量。

更多技巧: 网上还有一些很好的关于protobuf的文章,例如protobuf和thrift之间的优缺点对比,protobuf的int压缩设计,protobuf的使用例子,以及lua中解决proto文件嵌套其他proto文件的解决方法等等。学无止境,唯有一生勤勉。

金句分享

开始时,我并不指望能够学到多少东西。可是,读完这本书后,我发现,我激励自己的方式无意中促成了自我憎恨。由于认为自己"应该"做到许多事情,我不停的指责自己、命令自己、要求自己。这不可避免地导致内在的分裂与不满。

——摘自《非暴力沟通》的“译序”,作者马歇尔·卢森堡博士,译者阮胤华。

转载于:https://www.cnblogs.com/zgwu/p/10403939.html

Google protobuf使用技巧和经验相关推荐

  1. Google搜索使用技巧

    来源 http://blog.csdn.net/agyn125/archive/2008/01/27/2067930.aspx 1. Google搜索技巧(11):提高精确度的"in&quo ...

  2. 使用google高级搜索技巧

    练习使用google高级搜索技巧: 关键字 and 关键字:在Google的检索规则中,最基本的一条是默认And规则,即当你输入多个检索词之后,Google默认为要检索所有的包含所有检索词的网页,它们 ...

  3. Protobuf3 google protobuf

    Protobuf3 相关连接: Google-protobuf(需要翻墙):https://developers.google.com/protocol-buffers/ Protobuf on gi ...

  4. 一种自动反射消息类型的 Google Protobuf 网络传输方案

    陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen 这篇文章要解决的问题是:在接收到 protobuf 数据 ...

  5. google ProtoBuf开发者指南

    目录 1   概览 1.1   什么是protocol buffer 1.2   他们如何工作 1.3   为什么不用XML? 1.4   听起来像是为我的解决方案,如何开始? 1.5   一点历史 ...

  6. Google protobuf解析消息逻辑的版本问题

    在分析caffe2源码的过程中,由于caffe2使用protobuf作为网络结构和网络参数序列化和反序列化的机制,想在反序列化之前进行加解密处理,这是反向protouf其实有两个版本的实现来进行消息的 ...

  7. 使用CSharp编写Google Protobuf插件

    什么是 Google Protocol Buffer? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 ...

  8. css之其它技巧和经验列表

    其它技巧和经验列表(*以下实例默认运行环境都为Standard mode): 如何让层在falsh上显示? 方法: ``` 设置flash的wmode值为transparent或opaque ``` ...

  9. pythongoogle.probuf.timestamp_数据通信格式:Google Protobuf

    Protobuf是Google开发的序列化结构数据的一套工具,适合用于数据存储,以及不同语言不同应用之间进行通信的数据交换格式.目前Google提供了C++,Python,Java,Go等语言的支持. ...

最新文章

  1. c++ 从文本中逐行读取,并按空格对读取的一行进行分割
  2. 如何拿到高薪数据分析师offer?从精准解读一篇招聘信息开始!
  3. 智汇医工 创享未来:国家标准《健康医疗信息安全指南》验证项目启动会成功举办...
  4. Geoserver汉语版出来啦!!
  5. GDCM:gdcm::XMLPrivateDictReader的测试程序
  6. linux系统while循环,linux命令:while循环(示例代码)
  7. 接口返回[object,Object]解决方法
  8. MS SQL 表字段增加,删除,修改
  9. nodejs脚本后台运行
  10. java watir_watir webdriver 安装
  11. 21cn邮箱服务器端,21CN 免费邮箱常见问题
  12. 历时两年,秘鲁四人调查团队发布反腐 AI
  13. 22个常用Python包,相信你一定用的到!
  14. 繁体字转换为中文python
  15. xml与json互转 C语言实现,通过json-lib、jdom及xom定义XML和JSON格式处理工具类实现xml和json间相互转换...
  16. 编程金融小白学 股票期权 lv.6 希腊字母 Gamma
  17. 加密解密,MySQL单行函数,数学函数字符串日期时间,流程控制,完整详细可收藏查询SQL
  18. R语言实现SOM(自组织映射)模型(三个函数包+代码)
  19. 图像处理---亚像素
  20. 使用php读取文件中的内容,以表格的形式进行输出。

热门文章

  1. 一个JavaBean和DTO转换的优秀案例
  2. SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图
  3. centos 安装 erlang
  4. 壊小子的学习【程序开发学习篇】(一)培训时期的学习
  5. microsoft visual sourcesafe explorer 获取不了文件夹的解决方法
  6. 经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已~~主要是:ceil,floor,round,intval...
  7. Gitblit用户没有push权限,但是已经在team里面配置了
  8. Linux soft lockup分析
  9. vs2008中xlslib与libxls库的编译及使用
  10. 小程序添加动画效果--遇到的问题