Protobuf 快速入门
语法概览
编写.proto文件
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 results_per_page = 3;
}
Java示例
使用 protoc
编译:protoc --java_out=../java/com/example/demo Search.proto
;--java-out
为相对于 Search.proto
的相对路径
Maven依赖
${protobuf-version}版本可以通过编译后的.java文件中注释获取
<!-- ${protobuf-version}版本可以通过编译后的.java文件中注释获取-->
<!-- // Generated by the protocol buffer compiler. DO NOT EDIT!-->
<!-- // NO CHECKED-IN PROTOBUF GENCODE-->
<!-- // source: Search.proto-->
<!-- // Protobuf Java Version: 4.31.1-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf-version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>${protobuf-version}</version>
</dependency>
验证代码
import com.google.protobuf.InvalidProtocolBufferException;
public class SearchMain {
public static void main(String[] args) {
Search.SearchRequest searchRequest = Search.SearchRequest.newBuilder()
.setQuery("top")
.setPageNumber(1)
.setResultsPerPage(10)
.build();
byte[] bytes = searchRequest.toByteArray();
try {
Search.SearchRequest parsedMessage = Search.SearchRequest.parseFrom(bytes);
System.out.println("验证成功: " + parsedMessage);
} catch (InvalidProtocolBufferException e) {
System.err.println("验证失败: " + e.getMessage());
}
}
}