标签:
最近玩了玩谷歌的Protocol Buffer,下面就简单介绍下
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过12,183 个.proto 文件,他们用于RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API相比较一些其他的XML技术而言,该技术的一个明显特点就是更加节省空间(以二进制流存储)、速度更快以及更加灵活。
解压完成后首先要对源码进行编译再此以win7为例,因为编译需要用到visual studio所以没有安装的需要先安装vs,我电脑上装的是vs2010,装好vs后打开vsprojects文件夹
点击红框内的文件打开,这时候就打开了vs程序,应该会提示进行项目转换
将编译模式切换为Release模式,并右键分别生成libprotobuf,libprotobuf-lite,libprotoc,protoc这四个工程,编译完成后在Release文件夹下会生成这四个文件libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib,protoc.exe
将它们拷贝到c盘windows目录下
接下来就可以用protoc了,使用如下命令
protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR path/to/file.proto以下是各种语言的不同写法
例如
protobuf-master\java>protoc -I=D:\Cell\proto --java_out=D:\Cell\proto\Cell D:\Cell\proto\test.proto
如果不出意外在目标路径下就会生成相应的版本的文件了,文件有了接下来就是如何用,下面以java为例
别的语言不太清楚,java在使用的时候问题会比较多,当你把生成的java文件拷贝到编辑器里边时会发现报错,这是因为缺少jar包,jar包从何而来呢?进入proto源码下的java文件夹有个README.md用记事本打开它
跟着它一步一步来吧,首先安装maven,就是下载完了配置下环境变量,然后分别运行1,2,3命令吧,第三步要注意
就是说你要确保protobuf-master\src目录下有proto.exe,理论上你自己编译完成了就有了,然而并没有,好吧,还记得编译完成后我们生成的那几个文件有这个吧,把它再拷贝一份过来,然后再来运行这几个命令,顺利完成。到此为止你的protobuf-master\java\target这个路径下就会多了一些文件了,把jar包拷贝到编译器吧,然后就可以开始使用了。
在此给出官网上一个例子,这是一个.proto文件
message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; }
使用的时候就可以这样用了
<strong><span style="color:#330033;">Person john = Person.newBuilder() .setId(1234) .setName("John Doe") .setEmail("jdoe@example.com") .addPhone( Person.PhoneNumber.newBuilder() .setNumber("555-4321") .setType(Person.PhoneType.HOME)) .build(); Log.d("test",john.toString()+"");</span></strong><span style="color:#ffffff;"> </span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/shaohx0518/article/details/46881327