Google Protocol Buffer安装编译及使用
近期玩了玩谷歌的Protocol Buffer。以下就简介下
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准。眼下已经正在使用的有超过 48,162 种报文格式定义和超过12,183 个.proto 文件,他们用于RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,能够用于结构化数据串行化。或者说序列化。它非常适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。眼下提供了 C++、Java、Python 三种语言的 API相比較一些其它的XML技术而言,该技术的一个明显特点就是更加节省空间(以二进制流存储)、速度更快以及更加灵活。
安装 Google Protocol Buffer
在站点 http://code.google.com/p/protobuf/downloads/list上能够下载Protobuf 的源码。然后解压编译安装便能够使用它了。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
解压完毕后首先要对源代码进行编译再此以win7为例,由于编译须要用到visual studio所以没有安装的须要先安装vs,我电脑上装的是vs2010,装好vs后打开vsprojects目录
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
点击红框内的文件打开。这时候就打开了vs程序。应该会提示进行项目转换
将编译模式切换为Release模式,并右键分别生成libprotobuf,libprotobuf-lite。libprotoc,protoc这四个project。编译完毕后在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用记事本打开它
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
跟着它一步一步来吧,首先安装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>
Google Protocol Buffer安装编译及使用的更多相关文章
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- Google protocol buffer在windows下的编译
在caffe框架中,使用的数据格式是google的 protocol buffer.对这个不了解,所以,想简单学习一下.简单来说,Protocol Buffer 是一种轻便高效的结构化数据存储格式,可 ...
- Google Protocol Buffer的安装与.proto文件的定义(转)
转自(https://www.cnblogs.com/yinheyi/p/6080244.html) 什么是protocol Buffer呢? Google Protocol Buffer( 简称 P ...
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
- Google Protocol Buffer
Google Protocol Buffer(protobuf)是一种高效且格式可扩展的编码结构化数据的方法.和JSON不同,protobuf支持混合二进制数据,它还有先进的和可扩展的模式支持.pro ...
- 【Google Protocol Buffer】Google Protocol Buffer
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...
- 转Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
随机推荐
- 【bzoj3144】[Hnoi2013]切糕 网络流最小割
题目描述 输入 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤ ...
- 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图
原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...
- 让DIV的滚动条自动滚动到最底部 - 3种方法
要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条. ...
- HDU3068 最长回文
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- Java中Collections的frequency方法
注:调用此方法时需要根据自己的须由复写Objects的equals方法 创建复写了equals方法的对象类 public class Student { private String name; pr ...
- Android 的保活的两种解决方案
原文链接:http://blog.csdn.net/pan861190079/article/details/72773549 详细的阐述了 Android 的保活的两种解决方案 —— 由panhao ...
- 行为型设计模式之观察者模式(Observer)
结构 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 适用性 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面.将这二者封装在独 ...
- sqlalchemy多表查询
from datetime import datetime from sqlalchemy import Column,Integer,String,Boolean,DateTime,ForeignK ...
- 4.创建OpenStack的node环境脚本
创建OpenStack的node环境脚本 使用source admin-openrc.sh来运行脚本 在任意目录下创建admin-openrc.sh文件 vim ~/admin-openrc.sh e ...
- 【C语言】32位,64位机器sizeof区别
float, double : 采用IEEE标准浮点数格式,格式固定 float 32bit, double 64bit int一般和CPU寄存器长度有关,不过也和编译器,汇编器有关 由于C ,C++ ...