1.简单明了介绍ProtocolBuffer

2. ProtocolBuffer(pb)所做事情其实类似于xml、json,也就是把某种数据结构的信息依照某种格式保存起来。主要用于数据存储、传输等。

3. 效率高,支持多种编程语言。

4. 本地搭建环境

  首先安装MAVEN:

下载apache-maven-3.3.3-bin.zip并解压缩

在环境变量中添加M2_HOME,值为解压的目录

在环境变量path中添加%M2_HOME%\bin

输入mvn –v查看版本验证安装成功之后获取protobuf的jar包

下载protobuf-2.5.0.zip和protoc-2.5.0-win32.zip并解压(下文中用d:\ protobuf-2.5.0和d:\win32举例作为解压目录)

将d:\win32中的protoc.exe复制到D:\protobuf-2.5.0\src下,打开cmd,在D:\protobuf-2.5.0\java下执行mvn install

在D:\protobuf-2.5.0\java\target下得到protobuf-java-2.5.0.jar文件,导入到项目中。就ok了。

5. 核心文件.proto文件相当于确定数据协议,数据结构中存在了哪些数据,数据类型是什么。

6. 限定修饰符

required 不可增加或删除的字段,在程序中的build之前必须先初始化,不然会抛异常。

optional 可选字段,可删除、可以不初始化。

repeated 可重复字段,对应到Java文件里 就是list。

7. 定义.proto文件

message User{

 acctID = 1;
       required string passwd = 2;
  }

1. message是消息定义的关键字,等同于C++中的struct/class,或是Java中的class。
      2. LogonReqMessage为消息的名字,等同于结构体名或类名。
      3. required前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值。与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和repeated,带有这两种限符          的消息字段则没有required字段这样的限制。相比于optional,repeated主要用于表示数组字段。具体的使用方式在后面的用例中均会一一列出。
      4. int64和string分别表示长整型和字符串型的消息字段,在Protocol Buffer中存在一张类型对照表,既Protocol Buffer中的数据类型与其他编程语言(C++/Java)中所用类型的对照。该对照表中将          给出在不同的数据场景下,哪种类型更为高效。该对照表将在后面给出。
      5. acctID和passwd分别表示消息字段名,等同于Java中的域变量名,或是C++中的成员变量名。
      6. 标签数字12则表示不同的字段的唯一编号,在序列化后的二进制数据中的布局位置。在该例中,passwd字段编码后的数据一定位于acctID之后。需要注意的是该值在同一message中不能重复。          另外,对于Protocol Buffer而言,标签值为1到15的字段在编码时可以得到优化,既标签值和类型信息仅占有一个byte,标签范围是16到2047的将占有两个bytes,而Protocol Buffer可以支持字          段数量则为2的29次方减一。有鉴于此,我们在设计消息结构时,可以尽可能考虑让repeated类型的字段标签位于1到15之间,这样便可以有效的节省编码后的字节数量。

8. 生成Java类

  命令:进入protoc.exe 所在的目录下 执行:protoc.exe --java_out=./ user.proto

9. 在Java中使用

假设在.pro文件中定义一个属性为 bytes name

Java中可以这样写:

String name = “aaaa”;

user.setName(ByteString.copyFromUtf8(name)); 即可。

java中取ByteString的值

假如反序列化后的属性值为 ByteString类型的,那么可以

通过user.getName().toStingUtf8(); 即可。

Protocol Buffer格式传输的更多相关文章

  1. Google的Protocol Buffer格式分析

    [转]转自:序列化笔记之一:Google的Protocol Buffer格式分析 从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作 ...

  2. 序列化笔记之一:Google的Protocol Buffer格式分析

    从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作为一个学了多年通信的人,ProtocolBuffer在我看来是一种信源编码.所谓信 ...

  3. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  4. Protocol Buffer技术详解(C++实例)

    Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...

  5. [翻译]Protocol Buffer 基础: C++

    目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...

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

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

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

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

  8. 使用hessian+protocol buffer+easyUI综合案例--登陆

    首先先简单介绍下hessian ,protocol buffer, easyUI框架 hessian: Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协 ...

  9. Google protocol buffer在windows下的编译

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

随机推荐

  1. GitLab权限介绍

    访问权限 - Visibility Level 这个是在建立项目时就需要选定的,主要用于决定哪些人可以访问此项目,包含3种 Private - 私有,只有属于该项目成员才有原先查看 Internal ...

  2. 关于Java中返回零长度数组或空集合比较好,还是返回null这个问题的一些想法

    近日在方法返回类型为List数据类型时,返回结果为空集合比较好,还是null比较好的问题上有点纠结. 我觉得应该统一返回空集合,这样可以不用进行空指针的判断,不然又多了一个产生bug的可能性.而有人认 ...

  3. 第二次组队赛 二分&三分全场

    网址:CSUST 7月30日(二分和三分) 这次的比赛是二分&三分专题,说实话以前都没有接触过二分,就在比赛前听渊神略讲了下.......不过做着做着就对二分熟悉了,果然做题是学习的好方法啊~ ...

  4. BZOJ 2150 cogs 1861 [国家集训队2011]部落战争

    题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...

  5. jquery-cookie持久化

    jQuery.Cookie.js,是一个轻量级的Cookie管理插件 <script src="jQuery.1.8.3.js" type="text/javasc ...

  6. caffe中ConvolutionLayer的前向和反向传播解析及源码阅读

    一.前向传播 在caffe中,卷积层做卷积的过程被转化成了由卷积核的参数组成的权重矩阵weights(简记为W)和feature map中的元素组成的输入矩阵(简记为Cin)的矩阵乘积W * Cin. ...

  7. Linux 3.14 待机流程分析

    1:待机节点创建 static int __init pm_init(void) { int error = pm_start_workqueue(); if (error) return error ...

  8. Github Pages 建立过程记录

    之前建立过一个測试页面. 如今在折腾CreateJS 试着把离线版的文档传到github pages上面. 第一步:创建Repository 第二步:本地初始化 主要命令:git init 第三步:复 ...

  9. S 禁止F12和右键操作控制台,兼容各浏览器

    document.oncontextmenu = function () { return false; };         document.onkeydown = function () {   ...

  10. C语言中为什么要使用enum

    转载请注明出处,否则将追究法律责任http://blog.csdn.net/xingjiarong/article/details/47275971 在C语言中有一个关键字是enum,枚举类型,不知道 ...