教程列表:
springboot simple(0) springboot简介
springboot simple(1) springboot Helloworld
springboot simple(2) springboot Starter
springboot simple(3 )springboot Web开发
springboot simple(4)springboot 数据持久化
springboot simple (5) springboot Nosql
springboot simple (6) springboot mqtt
springboot simple (7) springboot thrift
springboot simple (8) springboot kafka
springboot simple (9) springboot jpa(Hibernate)
springboot simple (10) springboot protobuf
1 protobuf简介
protocolbuffer(以下简称protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平台。
google 提供了多种语言的实现:java、c#、c++、go 和python,每一种实现都包含了相应语言的编译器以及库文件。
它是一种二进制的格式,可以把它用于分布式应用之间的数据通信。
2 protobuf下载和安装
下载地址:https://github.com/protocolbuffers/protobuf/releases
我这里下载的是win 64位。
直接解压即可。
3 springboot protobuf集成开发
第1步:编写heroic.proto文件。
syntax = "proto3";
// 表示生成的序列化器的Java包
option java_package = "org.feidao.chapter81.model";
// 表示生成的Java序列化器的类名
option java_outer_classname = "HeroicFactory";
message Heroic {
int64 id = 1;
string name = 2;
string remarks = 3;
}
第2步:根据heroic.proto文件生成java文件。
Cmd进入bin目录,输入命令:protoc --java_out=. ./heroic.proto
执行后会生成对应的java文件。
注意:proto文件和生成的Java文件名称不能一致!
第3步:新建springboot工程,将生成的java文件拷贝到项目中,pom文件引入:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.21.11</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.21.11</version>
</dependency>
<dependency>
<groupId>com.googlecode.protobuf-java-format</groupId>
<artifactId>protobuf-java-format</artifactId>
<version>1.4</version>
</dependency>
第4步:调用实现序列化:
HeroicFactory.Heroic.Builder builder = HeroicFactory.Heroic.newBuilder();
long lId = 0l;
try {
lId = Long.parseLong(id);
}catch (Exception e){
e.printStackTrace();
}
builder.setId(lId);
builder.setName(name);
builder.setRemarks(remarks);
HeroicFactory.Heroic heroic= builder.build();
//转换成字节数组
byte[] bytes = heroic.toByteArray();
log.info("序列化:" + Arrays.toString(bytes));
反序列化:
try {
HeroicFactory.Heroic deserializeHeroic = HeroicFactory.Heroic.parseFrom(bytes);
log.info("反序列化:");
log.info("id:" + deserializeHeroic.getId());
log.info("name:" + deserializeHeroic.getName());
log.info("remarks:" + deserializeHeroic.getRemarks());
}catch (Exception e){
e.printStackTrace();
}
4 测试验证
postman发送请求:
序列化log:
反序列化log:
代码详见:
https://gitee.com/linghufeixia/springboot-simple
chapter8-1