如何编写Protocol Buffers消息?及在Protobuf中添加long类型字段
关于Protocol Buffers消息编写与long类型字段的实现
一、编写Protocol Buffers消息的基本流程
- 创建后缀为
.proto的定义文件,这是Protobuf的核心配置文件 - 在文件开头声明Protobuf版本,常用的是
syntax = "proto3";(或syntax = "proto2";,两者特性有差异) - 使用
message关键字定义消息类型,每个消息可以包含多个字段 - 为每个字段指定类型、唯一字段编号和名称,字段编号用于二进制编码,不可重复
- 可添加额外配置选项,比如指定生成Java类的包名、类名等
二、添加long类型字段的实现
Protobuf中与Java Long对应的类型是int64(有符号)或uint64(无符号)。结合你给出的Java示例:
public class Dummy implements Serializable { @Field("my_id") @JsonProperty("my_id") private Long myId; }
对应的Protobuf定义如下:
syntax = "proto3"; // 指定生成Java类的包路径 option java_package = "com.yourpackage"; // 指定生成的外层类名 option java_outer_classname = "DummyProto"; message Dummy { // 对应Java中的Long myId,json_name指定JSON序列化字段名 int64 my_id = 1 [json_name = "my_id", java_type = "java.lang.Long"]; }
关键说明:
int64是Protobuf的原生类型,默认生成Java的long基本类型;添加java_type = "java.lang.Long"选项后,会生成Long包装类,和示例中的字段类型匹配json_name = "my_id"配置对应Java代码中的@JsonProperty("my_id"),保证JSON序列化时的字段名一致- 字段编号
1是必填项,范围1-536870911,建议预留部分编号用于后续扩展
生成Java代码
使用Protobuf编译器protoc生成对应代码,命令示例:
protoc --java_out=./src/main/java ./dummy.proto
生成的Java类会自动实现Protobuf的序列化逻辑,无需手动实现Serializable接口。
内容的提问来源于stack exchange,提问作者javed alam khan
相关产品推荐
相关产品推荐

