google protobuf 实体类和java对象互转_ProtoBuf试用与JSON的比较,高级程序员都应该看...

介绍

ProtoBuf 是google团队开发的用于高效存储和读取结构化数据的工具。什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据。比如电话簿上有很多记录数据,每条记录包含姓名、ID、邮件、电话等,这种结构重复出现。

同类

XML、JSON 也可以用来存储此类结构化数据,但是使用ProtoBuf表示的数据能更加高效,并且将数据压缩得更小。

原理

Protobuf是一个网络通信协议,提供了高效率的序列化和反序列化机制,序列化就是把对象转换成二进制数据发送给服务端,反序列化就是将收到的二进制数据转换成对应的对象。(关于proto结构体怎么编写,可自行查阅文档)

举个例子

1. 先创建一个proto文件

message.proto

1680583b1a6928fc5edca6272206b590.png

2. 创建一个Java项目

并且将proto文件放置 src/main/proto 文件夹下

3. 编译proto文件至Java版本

  • 用命令行 cd 到 src/main 目录下
  • 终端执行命令 : protoc --java_out=./java ./proto/*.proto
  • 会发现,在你的src/main/java 里已经生成里对应的Java类

4. 依赖Java版本的ProtoBuf支持库

这里只举一个用Gradle使用依赖的栗子

implementation 'com.google.protobuf:protobuf-java:3.9.1'

5. 将Java对象转为ProtoBuf数据

Message.Person.Phone.Builder phoneBuilder = Message.Person.Phone.newBuilder();Message.Person.Phone phone1 = phoneBuilder .setNumber("100860") .setType(Message.Person.PhoneType.HOME) .build();Message.Person.Phone phone2 = phoneBuilder .setNumber("100100") .setType(Message.Person.PhoneType.MOBILE) .build();Message.Person.Builder personBuilder = Message.Person.newBuilder();personBuilder.setId(1994);personBuilder.setName("XIAOLEI");personBuilder.addPhone(phone1);personBuilder.addPhone(phone2);Message.Person person = personBuilder.build();long old = System.currentTimeMillis();byte[] buff = person.toByteArray();System.out.println("ProtoBuf 编码耗时:" + (System.currentTimeMillis() - old));System.out.println(Arrays.toString(buff));System.out.println("ProtoBuf 数据长度:" + buff.length);

6. 将ProtoBuf数据,转换回Java对象

System.out.println("-开始解码-");old = System.currentTimeMillis();Message.Person personOut = Message.Person.parseFrom(buff);System.out.println("ProtoBuf 解码耗时:" + (System.currentTimeMillis() - old));System.out.printf("Id:%d, Name:%s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`com.google.protobuf:protobuf-java` 是 Google Protocol Buffers 的 Java 实现库,它的作用是提供了 Protocol Buffers 的编解码功能,用于在不同的系统之间高效地进行数据序列化和反序列化。 Protocol Buffers(简称 Protobuf)是一种轻量级、高效的数据交换格式,它可以将结构化数据序列化为二进制格式,并支持跨不同语言和平台的数据交换。通过使用 Protobuf,开发者可以定义数据结构的消息类型,并生成相应的代码,用于在不同系统之间传输和存储数据。 `com.google.protobuf:protobuf-java` 提供了 ProtobufJava 中的实现,包含了 Protobuf 的编解码器、消息定义语言、工具等。 具体来说,`com.google.protobuf:protobuf-java` 的作用如下: 1. 数据序列化和反序列化:`protobuf-java` 提供了 Protobuf 的编解码功能,可以将 Protobuf 消息对象序列化为二进制数据,或将二进制数据反序列化为 Protobuf 消息对象。这样可以在不同的系统之间高效地传输和存储结构化数据。 2. 消息定义语言:`protobuf-java` 包含了 Protobuf 的消息定义语言(Protocol Buffers IDL),开发者可以使用该语言定义消息的结构和字段,并通过编译器生成相应的 Java 代码。 3. 工具支持:`protobuf-java` 提供了一些工具,如编译器(protoc)和插件,用于生成和处理 Protobuf 相关的代码和文件。 总之,`com.google.protobuf:protobuf-java` 是 Google Protocol Buffers 的 Java 实现库,提供了 Protobuf 的编解码功能、消息定义语言和工具支持。通过使用 Protobuf,开发者可以方便地序列化和反序列化结构化数据,并实现不同系统之间的高效数据交换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值