Protobuf配置与安装

1 安装与配置

1、protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/

2、下载最新的protobuf,下载地址:https://code.google.com/p/protobuf/downloads/list

3、下载protobuf2.5.o版本,protobuf-2.5.0.tar.gz解压并进行安装。

解压:tar xvf protobuf-2.5.0.tar.gz

安装步骤:(1)./configure (2)make (3)make check (4)make install

注意:安装成功后,将它的bin和lib目录分别加入到PATH和LD_LIBRARY_PATH环境变量,以方便直接调用。

通常建议安装到/usr/local目录下,执行configure时,指定--prefix=/usr/local/protobuf即可

设置环境变量过程:编辑/etc/profile,在文件末尾添加:

export PATH=$PATH:/usr/local/protobuf/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

2 简单实例

2.1 编写example.proto

2.2 生成pb.h 和pb.c

         protoc  -I=src_dir  --cpp_out=dst_dir  $src_dir/addressbook.proto 

生成example.pb.h 和example.pb.cc

2.3 使用protobuf

2.3.1 编写Write.cpp

注:

ptest::person 的定义在example.proto 生成的example.pb.h 文件中进行声明,SerializeToOstream将对象序列化后写入fstream流。

2.3.2 编译write.cpp

注:

-I /usr/local/include –L /usr/local/lib 分别为编译安装protobuf对应文件位置(cygwin对应目录位置),CentOs中编译安装protobuf后对应的文件位置        为:/usr/local/protobuf/include 和 /usr/local/protobuf/lib

2.3.3 编写reader.cpp

reader.cpp文件如下:

注:

1、ParseFromIstream从fstream中读取文件并反序列化。

2、编译reader.cpp:

  3 数据类型

3.1 消息定义

Protobuf消息定义:

消息由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。

字段格式:限定修饰符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]

限定修饰符包含 required\optional\repeated

1) required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。

2) optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。

3) repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值。

3.2 数据类型

Protobuf定义了一套基本的数据类型,如下图所示:

参考资料:

http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/

http://www.cnblogs.com/Anker/archive/2013/07/24/3209764.html

protobuf配置与使用的更多相关文章

  1. mac下protobuf配置记录

    sudo vi /etc/profile加到文件底部 export PATH=$PATH:$GOBIN:/usr/local/go/bin export GOPATH=/Users/jinfuzhan ...

  2. [Protobuf] Mac系统下安装配置及简单使用

    Mac下Protobuf安装 Protobuf源码Github地址: https://github.com/google/protobuf 配置环境教程: https://github.com/goo ...

  3. python2.x 使用protobuf

    1.在windows下配置protobuf 1.1 下载对应的包,包含两个:protoc.exe和源码文件(protoc也可以自己生成) 下载地址1 --- google code最近在迁移,也许以后 ...

  4. linux环境下protobuf安装

    1. 到GitHub下载源码,执行解压命令后,进入解压后的目录 2. 执行./autogen,生成configure 3. 执行./configure --prefix=/usr/local/,pro ...

  5. golang——win10环境protobuf的使用

    1.protobuf配置 (1)https://github.com/protocolbuffers/protobuf/releases (2)选择适合的版本:protoc-3.8.0-win64.z ...

  6. caffe安装:ubuntu16.04 + opencv2.4 + python 2.7+ CUDA 8.0 RC + CuDNN 5.0

    官方教程:http://caffe.berkeleyvision.org/install_apt.html 主要参考教程: https://github.com/BVLC/caffe/wiki/Ubu ...

  7. 深入了解使用egret.WebSocket

    概念 本教程不讲解TCP/IP协议,Socket属于哪层,消息包体怎么设计等,主讲 egret.WebSocket 使用示例 与 protobuf 使用示例. 在使用egret.WebSocket之前 ...

  8. 开源深度学习架构Caffe

    Caffe 全称为 Convolutional Architecture for Fast Feature Embedding,是一个被广泛使用的开源深度学习框架(在 TensorFlow 出现之前一 ...

  9. Tensorflow 与Caffe(转)

    TensorFlow TensorFlow 是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写 C++或 CUDA 代码.它和 Theano 一样都支持自动求 ...

随机推荐

  1. [翻译] MZTimerLabel 用作秒表或者倒计时

    MZTimerLabel 用作秒表或者倒计时 https://github.com/mineschan/MZTimerLabel A handy class for iOS to use UILabe ...

  2. ArcEngine 连接sql server sde

    前言 本想在soe中进行sde for sqlserver数据获取.由于soe的调试不方便,为了测试的简便,先在桌面上写了个arcengine连接sde for sqlserver的程序,但是本以为是 ...

  3. tcp_client.c tcp_server.c

    #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> ...

  4. Coursera课程《Python数据结构》中课件

    You can access the Google Drive containing all of the current and in-progress lecture slides for thi ...

  5. Kmeans聚类算法分析(转帖)

    原帖地址:http://www.opencvchina.com/thread-749-1-1.html       k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在一个组中. ...

  6. OTL翻译(10) -- OTL的流缓冲池

    OTL的流缓冲池 一般来讲,流一般作为一个局部的变量被使用,当使用完毕后就立刻关闭,如果需要再次使用就需要再次的声明变量,如此循环.OTL流的缓冲池(内存池)是一个解决以往的流性能低下的一个机制.当流 ...

  7. Informatica 常用组件Lookup缓存之二 使用永久查找高速缓存

    可以将"查找"转换配置为使用非永久或永久高速缓存.基于"查找高速缓存永久"属性的会话成功后,PowerCenter 将保存或删除查找高速缓存文件. 如果查找表在 ...

  8. JavaScripts基础

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...

  9. Lambda表达式 简介 语法 示例 匿名内部类

    在AS中使用 Lambda 表达式 Demo地址:https://github.com/baiqiantao/MultiTypeTest.git Gradle(Project级别)中添加classpa ...

  10. C#的几种写文件方法

    C#写文件处理操作在很多的开发项目中都会涉及,那么具体的实现方法是什么呢?这里向大家介绍三大方法,希望对你在开发应用中有所启发. 首先C#写文件处理操作必须先导入命名空间:using System.I ...