ProtoBuf语法version3
syntax = "proto3"; //语法版本
package com.njit.cn; //生成的java类所在包名
option java_outer_classname ="MyPerson";//生成的类名称
message Person { //pojo
int32 id = 1; //int变量
string name = 2;//字符串变量
repeated string emails = 3;//emails list集合
}
-I:.proto文件所在的目录 --java_out:遍历后的java文件目录地址 person.proto 文件名称
protoc -I=C:\\Users\xiaodongchen\Desktop --java_out=C:\\Users\xiaodongchen\Desktop person.proto
示例代码
proto文件
syntax = "proto3";//语法版本
package protobuf;//生成的java类所在包名
option java_outer_classname ="MyPerson";//生成的类名称
message Person { //pojo
int32 id = 1; //int变量
string name = 2;//字符串变量
repeated string emails = 3;//emails list集合
}
java文件生成命令:
protoc -I=C:\\Users\xiaodongchen\Desktop --java_out=C:\\Users\xiaodongchen\Desktop person.proto
将生成后的文件拷贝到java项目中,为protobuf添加依赖包:在pom.xml中添加
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.17.3</version>
</dependency>
</dependencies>
主程序:
public class Application {
public static void main(String[] args) throws InvalidProtocolBufferException {
// 获得person的建造者
MyPerson.Person.Builder builder = MyPerson.Person.newBuilder();
// int 类型
builder.setId(2020190608);
// 字符串类型
builder.setName("chenxiaodong");
// 集合类型, 使用add方法添加数据
builder.addEmails("27743983381@qq.com");
builder.addEmails("27743983382@qq.com");
builder.addEmails("27743983383@qq.com");
// 建造Person实例
MyPerson.Person person = builder.build();
// 对person进行序列化
byte[] data = person.toByteArray();
System.out.println("data 字节数:"+data.length);
// 对字节数组进行反序列化
MyPerson.Person myPerson = MyPerson.Person.parseFrom(data);
System.out.println(myPerson);
}
}
运行结果:
data 字节数:80
id: 2020190608
name: "chenxiaodong"
emails: "27743983381@qq.com"
emails: "27743983382@qq.com"
emails: "27743983383@qq.com"
Process finished with exit code 0