java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Protobuf入门

Protobuf详解及入门指南附完整代码

作者:AQin1012

Protobuf是一种由Google开发的二进制序列化格式,用于高效地序列化和反序列化结构化数据,它广泛应用于分布式系统、RPC框架和数据存储中,提供了高效性、简洁性、版本兼容性和语言无关性,本文介绍Protobuf详解及入门指南,感兴趣的朋友一起看看吧

Protobuf概述

什么是Protobuf

Protobuf(Protocol Buffers)协议😉 Protobuf 是一种由 Google 开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景

为什么要使用Protobuf

其实 Protobuf 在许多领域都得到了广泛应用,特别是在分布式系统、RPC(Remote Procedure Call)框架和数据存储中,它提供了一种高效、简洁和可扩展的方式来序列化和交换数据,Protobuf 的主要优点包括:

Protobuf实战

环境配置

首先我们需要在 pom.xml 文件中添加如下依赖:

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.20.3</version>
</dependency>
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>3.20.3</version>
</dependency>

接着如果你希望.proto文件可以被idea识别的话,就需要安装 Protobuf 插件(非必要)

创建文件

然后我们创建一个.proto文件,如下图(完整代码在文末附录)

其中 syntax = "proto3" 表示协议版本,option java_package = "com.aqin.protobuf" 表示生成的类所处的层级,option java_multiple_files = true 表示需要將生成的类拆分为多个(false 的话就是不需要),MyRequest 和 Header 是消息结构。

进入到文件📃AQin.proto所在目录下,执行如下代码:

protoc -I=./ --java_out=./ ./AQin.proto

参数说明:

有一点需要注意的是这三个路径要使用相对路径就都使用相对路径,要使用绝对路径就都使用绝对路径(不要混着用),执行完成后,就会在指定的位置生成指定的文件,如下图

然后我们就可以通过生成的Java类来对接收到的信息进行解析,或者封装数据进对象进行发送

解析/封装数据

常用API

那我们上面的AQin.proto举个🌰

MyInfo myInfo = MyInfo.newBuilder().setName("Zhangsan");
Body body = Body.newBuilder().setMyInfo(myInfo).build();
ByteBuffer byteBuffer = ByteBuffer.allocate(body.toByteArray().length);
body.writeTo(CodedOutputStream.newInstance(byteBuffer));
//然后就可以发送了~~

附录

AQin.proto 完整代码

//协议版本
syntax = "proto3";
//生成的类所处的层级
option java_package = "com.aqin.protobuf";
//是否需要將生成的类拆分为多个
option java_multiple_files = true;
// request
message MyRequest{
  Header header = 1;
  Body body = 2;
}
//Header
message Header {
  uint32  RequestId = 1;
  int64   Timestamp = 2;
}
//Body
message Body {
  MyInfo Info = 1;  //消息
  ServiceResult serviceResult = 2;  //结果反馈
}
message MyInfo{
  string  name = 1;
  string  age = 2;
}
message ServiceResult{
  uint32 ErrorCode = 1;
  string ErrorMsg = 2;
}

到此这篇关于Protobuf详解及入门指南的文章就介绍到这了,更多相关Protobuf入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文