您当前的位置: 首页 >  Java

cuiyaonan2000

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Protocol Buffer在Java中的使用方式

cuiyaonan2000 发布时间:2020-09-09 12:18:46 ,浏览量:0

序言

Protocol Buffer 和 XML、JSON一样都是结构数据序列化的工具,但它们的数据格式有比较大的区别:

  • 首先,Protocol Buffer 序列化之后得到的数据不是可读的字符串,而是二进制流
  • 其次,XML 和 JSON 格式的数据信息都包含在了序列化之后的数据中,不需要任何其它信息就能还原序列化之后的数据;但使用 Protocol Buffer 需要事先定义数据的格式(.proto 协议文件),还原一个序列化之后的数据需要使用到这个定义好的数据格式(网上很多java的使用方法介绍。首先就是编辑一个proto的数据结构文件,就像是一个java domain 类。后面就是针对该domain类进行 设置属性值和获取属性)
  • 最后,在传输数据量较大的需求场景下,Protocol Buffer 比 XML、JSON 更小(3到10倍)、更快(20到100倍)、使用 & 维护更简单;而且 Protocol Buffer 可以跨平台、跨语音使用(车载终端是直接穿的2进制数据,速度和Protocol Buffer是一样的)

通过将结构化的数据(拥有多种属性)进行序列化,从而实现(内存与硬盘之间)数据存储和交换的功能(这个东西的使用除非修改原有的数据结构否则几乎不会改动,就是获取对象类属性和设置对象属性cuiyaonan2000@163.com)

  • 序列化: 按照 .proto 协议文件将数据结构或对象转换成二进制流的过程
  • 反序列化:将在序列化过程中所生成的二进制流转换成数据结构或对象的过程

实现方式

目前实现方式有2种:

  • 一种是用google的命令将.proto文件转换成 JavaBean文件
  • 另外一种就不需要依赖.proto文件了,可以直接对POJO进行序列化和反序列化,使用起来非常简单。

第一种

先定义.proto文件,然后编译成javabean. 在序列化和反序列化.~~~~这个很简单

public class Test {

    public static void main(String[] args) throws IOException {
        UserOuterClass.User.Builder userBuilder = UserOuterClass.User.newBuilder();
        userBuilder.setName("子悠");
        userBuilder.setAge(18);
//        userBuilder.setComment("this is comment");

        System.out.println("\n**********************序列化*****************************");
        byte[] bytes = userBuilder.build().toByteArray();
        System.out.println("bytes length is " + bytes.length);
        for (int i = 0; i < bytes.length; i++) {
            System.out.print(bytes[i] + " ");
        }

        System.out.println("\n**********************反序列化*****************************");
        UserOuterClass.User user = UserOuterClass.User.parseFrom(bytes);
        System.out.println(user.getName());
    }
}
protobuf文件语法 文件结构

//指定版本	
syntax = "proto2";	

//定义包名	
package com.test.model;	
	
// 生成的包名
option java_package="com.pancm.protobuf";

//生成的java名
//注:这里使用的是proto3,相关的注释我已写了,这里便不再过多讲述了。需要注意一点的是proto文件和生
//成的Java文件名称不能一致!
option java_outer_classname = "UserInfo";

//定义结构数据	
message User {	
    //必选字段 第1个属性	
    required string name = 1;	
    //必选字段 第2个属性	
    required int32 age = 2;	
    //可选字段 第3个属性	
    optional string comment = 3;	
}
数据类型 .proto TypeJava Typedoubledoublefloatfloatint32intint64intuint32intuint64longsint32intsint64longfixed32intfixed64longsfixed32intsfixed64longboolbooleanstringStringbytesByte/Stringmapjava.util.Map 转换工具下载与使用 下载地址

https://github.com/protocolbuffers/protobuf/releases/tag/v3.13.0

转换命令

把.proto文件和protoc.exe(生成Java文件的软件)放到E盘目录下的protobuf文件夹下,然后再到该目录的dos界面下输入:protoc.exe --java_out=文件绝对路径名称。 例如(输入完之后,回车即可在同级目录看到已经生成好的Java文件,然后将该文件放到项目中该文件指定的路径下即可。):

protoc.exe --java_out=E:\protobuf Test.proto
第二种

SpringBoot--实战开发--Protocol Buffer(五十四) - 简书

关注
打赏
1638267374
查看更多评论
立即登录/注册

微信扫码登录

0.0458s