近期玩了玩谷歌的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安装编译及使用的更多相关文章

  1. Google Protocol Buffer的安装与.proto文件的定义

    什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...

  2. Google protocol buffer在windows下的编译

    在caffe框架中,使用的数据格式是google的 protocol buffer.对这个不了解,所以,想简单学习一下.简单来说,Protocol Buffer 是一种轻便高效的结构化数据存储格式,可 ...

  3. Google Protocol Buffer的安装与.proto文件的定义(转)

    转自(https://www.cnblogs.com/yinheyi/p/6080244.html) 什么是protocol Buffer呢? Google Protocol Buffer( 简称 P ...

  4. Google Protocol Buffer 的使用和原理[转]

    本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...

  5. Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

  6. Google Protocol Buffer

    Google Protocol Buffer(protobuf)是一种高效且格式可扩展的编码结构化数据的方法.和JSON不同,protobuf支持混合二进制数据,它还有先进的和可扩展的模式支持.pro ...

  7. 【Google Protocol Buffer】Google Protocol Buffer

    http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers ...

  8. 前端后台以及游戏中使用Google Protocol Buffer详解

    前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...

  9. 转Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

随机推荐

  1. Struts1 多个配置文件的实现

    在Struts 1.0中,我们只能在web.xml中为ActionServlet指定一个配置文件,这对于我们这些网上的教学例子来说当然没什么问题,但是在实际的应用开发过程中,可能会有些麻烦.因为许多开 ...

  2. hdu 1007 Quoit Design (最近点对问题)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. LeetCode -- Implement Stacks using Queue

    Question: Implement the following operations of a queue using stacks. push(x) -- Push element x to t ...

  4. 【BestCoder #44】

    因为这场比赛,我愉快地逃掉了晚自修. T1一开始各种SillyB,忘了40%的最低限制... T2各种想吐槽... 明明OJ警告说%lld是不行的我就换成%I64D(上面写这样的)... 结果各种WA ...

  5. POJ 1204 Word Puzzles | AC 自动鸡

    题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方 ...

  6. Gcd反应堆 (pgcd)

    Gcd反应堆 (pgcd) 题目描述 不知什么时候起,TA突然对gcd产生了浓厚的兴趣,于是他为此编写了个程序,输入分别不大于m,n (1<m,n<=10^7)的两个数,就能得出gcd(m ...

  7. Linux临时增加swap空间

    linux临时增加swap空间:step 1: #dd if=/dev/zero of=/home/swap bs=1024 count=500000 注释:of=/home/swap,放置swap的 ...

  8. es6+最佳入门实践(1)

    1.let和const 1.1.let和块级作用域 在es5中,js的作用域分为全局作用域和局部作用域,通常是用函数来区分的,函数内部属于局部作用域,在es6中新增了块级作用域的概念,使用{}括起来的 ...

  9. YYH的营救计划(NOIP模拟赛Round 6)

    题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...

  10. 小Z爱划水(NOIP信(sang)心(bin)赛)From FallDream

    题目: 小Z在机房.他和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同 ...