Google Protocol Buffer安装编译及使用

18 篇文章 0 订阅
13 篇文章 2 订阅

最近玩了玩谷歌的Protocol Buffer,下面就简单介绍下

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过12,183 .proto 文件,他们用于RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++JavaPython 三种语言的 API相比较一些其他的XML技术而言,该技术的一个明显特点就是更加节省空间(以二进制流存储)、速度更快以及更加灵活。

安装 Google Protocol Buffer

在网站 http://code.google.com/p/protobuf/downloads/list上可以下载Protobuf 的源代码。然后解压编译安装便可以使用它了。


解压完成后首先要对源码进行编译再此以win7为例,因为编译需要用到visual studio所以没有安装的需要先安装vs,我电脑上装的是vs2010,装好vs后打开vsprojects文件夹


点击红框内的文件打开,这时候就打开了vs程序,应该会提示进行项目转换

将编译模式切换为Release模式,并右键分别生成libprotobuflibprotobuf-litelibprotocprotoc这四个工程,编译完成后在Release文件夹下会生成这四个文件libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.exe 


将它们拷贝到cwindows目录下

接下来就可以用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>






评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值