详解Google Protobuf简明教程_相关技巧

来源:脚本之家  责任编辑:小易  

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在

Protobuf是什么

对于开发的应用程序,通常都需要经过打包部署后才可以交付给用户使用。用户得到应用程序后,需要通过交互式的安装部署程序将应用程序安装到本地环境中,然后才能正常使

Protobuf实际是一套类似Json或者XML的数据传输格式和规范,用于不同应用或进程之间进行通信时使用。通信时所传递的信息是通过Protobuf定义的message数据结构进行打包,然后编译成二进制的码流再进行传输或者存储。

如何保证这种情况下逻辑依然正确,用原生的方式就会非常麻烦。而protobuf使用optional配合默认值,可以很轻松的做版本兼容。 3. 减小体积。protobuf对数字采用了Varints编码

Protobuf的优点

你的build.gradle里面有添加google service的依赖吗? 如果有添加,而且上面的目录确实找不到对应的jar包,那么有很大可能是as下载依赖jar包时候下载失败了。确定你有成功的翻

相比较而言,Protobuf有如下优点: 足够简单 序列化后体积很小:消息大小只需要XML的1/10 ~ 1/3 解析速度快:解析速度比XML快20 ~ 100倍 多语言支持 更好的兼容性,Protobuf设计的一个原则就是要能够很好的支持向下或向上兼容

更新protobuf

如何安装使用Protobuf

本文只讲述如何操作,不讲述科普知识,如果你连什么是protocolbuff和.proto文件的基本常识都不知道,建议你先看看其他相关博客,再看本文。操作步骤如下: 1. 首先下载编译器和

安装

使用Python的话简便的安装方法如下

而流的方式是边读取数据边解析,数据读取完后,解析也就完毕了。 在数据格式方面,JSON和Protobuf效率明显比XML好很多,XML和JSON大家都很熟悉,Protobuf是Google提出的

pip install protobuf # 安装protobuf库 sudo apt-get install protobuf-compiler # 安装protobuf编译器

首先得到 protobuf 相应的包文件 ,在终端上输入如下wget http://protobuf.googlecode.co g++另外最好把Vim、make 也装了,不然的后面的就很容易出问题,这些在其他教程上都

如果自己编译安装的话可以参考git上安装指导,虽然写得不清楚:)

1. 安装cuda 一定按照官方教材 2. 安装blas 别弄那些mlk之类的东西,直接在命令行直接 2.No module named google.protobuf.internal 这说明你没有添加google.protobuf.的位置

使用

使用Protobuf有如下几个步骤: 定义消息 初始化消息以及存储传输消息 读取消息并解析

下面以一个实际的例子来说明如何使用Protobuf,先展示出项目的实际目录结构:

. ├── my │ ├── helloworld_pb2.py │ ├── helloworld_pb2.pyc │ └── __init__.py ├── mybuffer.io ├── my.helloworld.proto ├── reader.py └── writer.py

定义消息

Protobuf的消息结构是通过一种叫做Protocol Buffer Language的语言进行定义和描述的,实际上Protocol Buffer Language分为两个版本,版本2和版本3,默认不声明的情况下使用的是版本2,下面以版本2为来举个栗子, 假设我们定义了文件名为my.helloworld.proto的文件,如下:

package my; message helloworld { required int32 id = 1; required string str = 2; optional int32 wow = 3; }

然后我们需要使用protoc进行编译

protoc -I=./ --python_out=./ ./my.helloworld.proto -I: 是设定源路径 --python_out: 用于设定编译后的输出结果,如果使用其它语言请使用对应语言的option 最后一个参数是你要编译的proto文件

现在已经定义好了消息的数据结构,接下来看下如何使用

消息初始化和存储传输

我们来通过writer.py来初始化消息并存储为文件,代码如下:

from my.helloworld_pb2 import helloworld def main(): hw = helloworld() hw.id = 123 hw.str = "eric" print hw with open("mybuffer.io", "wb") as f: f.write(hw.SerializeToString()) if __name__ == "__main__": main()

执行writer.py之后就会将序列化的结果存储在文件mybuffer.io中,然后看下如何读取

消息读取与解析

我们通过reader.py来读取和解析消息,代码如下:

from my.helloworld_pb2 import helloworld def main(): hw = helloworld() with open("mybuffer.io", "rb") as f: hw.ParseFromString(f.read()) print hw.id print hw.str if __name__ == "__main__": main()

Reference:

Developer Guide

Github

到此这篇关于详解Google Protobuf简明教程的文章就介绍到这了,更多相关Google Protobuf内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

google protobuf 支持泛型吗

1. protobuf的竞争对手是xml,json等,要支持map的序列化,哪就和json之类没有什么区别 2. protobuf dsl定义各种schema,其实用一个map也能表达,如果再实现map,哪就是自我否定

google protobuf 序列化反序列化不支持中文么

这应该是编码问题,见意现在在通讯中尽量采用utf8.

为什么google protobuf不支持map的序列化和反序列化

例如:
!(5>0)
的结果为假。
虽然C编译在给出逻辑运算值时,以“1”代表“真”,“0 ”代表“假”。 但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:
由于5和3均为非“0”因此5&&3的值为“真”,即为1。
又如:
5||0的值为“真”,即为1。
5.2.3 逻辑表达式
逻辑表达式的一般形式为:
表达式 逻辑运算符 表达式
其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。
例如:
(a&&b)&&c
根据逻辑运算符的左结合性,上式也可写为:
a&&b&&c
逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。

如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

最近一段时间,由于项目的需要,接触到了Protobuf这个东东,在Linux环境下,体验了一把,感觉挺不错,很方便,且高效。是一个非常值得学习掌握和应用的数据抽象、平台无关、功能强大、…(此处省略1000字)的开源工具。
Google虽然把Protobuf做成了跨平台、跨语言,但作为微软的死对头,它在readme.txt文件的第一句话就表明了态度:为了考虑部分MSVC的用户,Protobuf提供了针对VS的安装说明,但Protobuf最好用于Unix环境下。
在上一篇博客中,我介绍了如何在Linux环境下安装Protobuf,现在让我们了解一下Windows环境下,如何在VS中使用Protobuf,注意是VS,在VC6的环境下,我搞弄了一个晚上都没成功,所以推荐VS2005或者以上版本:

  • 本文相关:
  • golang 微服务之grpc与protobuf的使用
  • c# protobuf自动更新cs文件
  • protobuf简单介绍和ubuntu 16.04环境下安装教程
  • 详解vue中使用protobuf踩坑记
  • vue中使用protobuf的过程记录
  • 如何为asp.net core添加protobuf支持详解
  • protobuf与json转换小结
  • c#使用protocol buffer(protobuf)进行unity中的socket通信
  • python如何通过protobuf实现rpc
  • 基于protobuf c++ serialize到char*的实现方法分析
  • 算法系列15天速成 第九天 队列
  • 解决fiddler在win7系统下的安全证书问题
  • 微信小程序 iphonex底部安全区域(底部小黑条)适配(一分钟解决)
  • 调试javascript/vbscript脚本程序(ie篇)
  • vscode常用知识小结
  • xmlhttp ie6下不跨域还提示没有权限,ie8下不会有这错误
  • 详解http协议(很经典)
  • git 命令行教程及实例教程(附github注册)
  • 深入讲解https中的加密算法
  • http referer详解及referer控制
  • google protobuf 支持泛型吗
  • google protobuf 序列化反序列化不支持中文么
  • 为什么google protobuf不支持map的序列化和反序列化
  • 如何在Windows环境下的VS中安装使用Google Protobuf完成S...
  • 有人用过Google protobuf吗
  • 为什么google protobuf不支持map的序列化和反序列化
  • win7 64位 VS2013 能装 google protobuf 吗,该怎么处理
  • google的protobuf比这样java原生的方式更有效率吗
  • com.google.protobuf.serviceexception在什么jar包下
  • 何解from google.protobuf import symbol_database as _symbol...
  • 谁有使用Google的开源技术protobuf的Java程序例子?
  • 控制Android应用程序的耗电量
  • Ubuntu 下配置protobuf
  • 怎么安装caffe.proto
  • 国内可以使用proto.io吗
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页相关技巧golang 微服务之grpc与protobuf的使用c# protobuf自动更新cs文件protobuf简单介绍和ubuntu 16.04环境下安装教程详解vue中使用protobuf踩坑记vue中使用protobuf的过程记录如何为asp.net core添加protobuf支持详解protobuf与json转换小结c#使用protocol buffer(protobuf)进行unity中的socket通信python如何通过protobuf实现rpc基于protobuf c++ serialize到char*的实现方法分析算法系列15天速成 第九天 队列解决fiddler在win7系统下的安全证书问题微信小程序 iphonex底部安全区域(底部小黑条)适配(一分钟解决)调试javascript/vbscript脚本程序(ie篇)vscode常用知识小结xmlhttp ie6下不跨域还提示没有权限,ie8下不会有这错误详解http协议(很经典)git 命令行教程及实例教程(附github注册)深入讲解https中的加密算法2019最新的pycharm激活码(推荐)进制转换算法原理(二进制 八进制eclipse 格式化代码时不换行与自微信小程序设置http请求的步骤详几款开源的中文分词系统十进制负数转换为二进制、八进制从console.log说起(console.log详url 长度有限制吗?git 撤销操作、删除文件和恢复文页面制作统一的头尾的方法(asp+js)算法系列15天速成 第一天 七大经典排序【微信小程序设置http请求的步骤详解使用python解决windows文件名非用反斜杠问将git项目导入github的方法(附创建分支)计算机中的字符串编码、乱码、bom等问题详写给正在读计算机专业的同学 该如何学习web高性能开发系列随笔 bearrui(ak-47)版ie 浏览器安全级别详情及区别小结textarea 在ie和ff下换行无法正常显示的解
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved