如何在Java中使用protobuf 是一种数据格式,同json,xml,等。但是一种二进制数据格式。

写在前面

本文看下在Java中如何使用protofbuf。

1:介绍

1.1:什么是protobuf

是一种数据格式,同json,xml,等。但是一种二进制数据格式。

1.2:强在哪里?为啥要用?

小,比json,xml等小3~10倍左右。
快,解析的速度比xml,json等快20~100倍。
小,意味着可以有更低的网络传输延迟。
快,程序也会有更高的性能。
最终有更小的rt。

2:正戏

  • 环境
    win,protobuf 3.0.0。

2.1:基础准备

首先在这里下载安装包,之后解压即可,接着配置下环境变量。然后主要就是设置idea了。首先下载插件:

接着创建一个测试项目,pom:


 4.0.0
 org.example
 proto
 1.0-SNAPSHOT
 
 
 
 com.google.protobuf
 protobuf-java
 3.0.0
 
 
 
 com.google.protobuf
 protobuf-java-util
 3.0.0
 
 

然后创建一个proto文件,如下:

//使用 proto3 语法 ,未指定则使用proto2
syntax = "proto3";
//生成 proto 文件所在包路径
package com.dahuyou.protobuf;
//生成 proto 文件所在包路径
option java_package = "com.dahuyou.protobuf.proto";
//生成 proto 文件名
option java_outer_classname="DemoProto";
message Demo {
 //自身属性
 int32 id = 1;
 string code = 2;
 string name = 3;
}

接着生成对应的针对文件解析的Java代码:

将生成的文件拷贝到src/java下就可以了。当然也可以自己通过命令行的方式生成Java代码:

格式protoc -I=源地址 --java_out=目标地址 源地址/xxx.proto
接着写一个测试类测试下:

package com.dahuyou.protobuf.proto;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.util.JsonFormat;
import java.util.Arrays;
public class SimpleTestMain {
 public static void main(String[] args) {
 //初始化数据
 DemoProto.Demo.Builder demo = DemoProto.Demo.newBuilder();
 demo.setId(1)
 .setCode("001")
 .setName("张三")
 .build();
 //序列化
 DemoProto.Demo build = demo.build();
 //转换成字节数组
 byte[] s = build.toByteArray();
 System.out.println("protobuf数据bytes[]:" + Arrays.toString(s));
 // protobuf的大小是15字节,而json的大小是50字节,protobuf大小只是json的四分之一左右
 System.out.println("protobuf序列化大小: " + s.length);
 DemoProto.Demo demo1 = null;
 String jsonObject = null;
 try {
 //反序列化
 demo1 = DemoProto.Demo.parseFrom(s);
 //转 json
 jsonObject = JsonFormat.printer().print(demo1);
 } catch (InvalidProtocolBufferException e) {
 e.printStackTrace();
 }
 System.out.println("Json格式化结果:\n" + jsonObject);
 // json的大小的50个字节,而protobuf的大小是15个字节,大了将近4倍
 System.out.println("Json格式化数据大小: " + jsonObject.getBytes().length);
 }
}

运行:

可以看到protobuf比json小了将近4倍,比xml的话就更多了。

done!!!

写在后面

参考文章列表

Protobuf 是啥以及为啥要用它
Java 中使用 protobuf :入门基础篇,看这篇就够了!

其他版本

3.5.0

作者:一户董原文地址:https://blog.csdn.net/wang0907/article/details/141611005

%s 个评论

要回复文章请先登录注册