Protocol Buffer格式传输

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.zipprotoc-2.5.0-win32.zip解压(下文中用d:\ protobuf-2.5.0d:\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{

    required int32 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(); 即可。

转载于:https://www.cnblogs.com/blue327/p/10065165.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值