首页 > 基础资料 博客日记
如何在Java中使用protobuf
2025-01-16 06:00:09基础资料围观29次
这篇文章介绍了如何在Java中使用protobuf,分享给大家做个参考,收藏Java资料网收获更多编程知识
写在前面
本文看下在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:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>proto</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- protobuf 支持 Java 核心包-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<!-- <version>3.15.3</version>-->
<version>3.0.0</version>
</dependency>
<!-- proto 与 Json 互转会用到-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<!-- <version>3.15.3</version>-->
<version>3.0.0</version>
</dependency>
</dependencies>
</project>
然后创建一个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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
上一篇:Java(若依):读取Yml配置文件
下一篇:Java 正则表达式