在 Java 中使用 protobuf

https://github.com/google/protobuf/releases 下载编译器,并设置环境变量。

创建java项目添加protobuf-java引用

compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.2.0'

编写.proto文件

syntax = "proto3";

message Person {
int32 id = 1;
string name = 2; repeated Phone phone = 4; enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
} message Phone {
string number = 1;
PhoneType type = 2;
}
}

使用下面命令编译出.java文件

protoc --java_out=./java ./proto/message.proto

编写java文件测试

public class Main {
public static void main(String[] args) {
Message.Person.Builder personBuilder = Message.Person.newBuilder();
personBuilder.setId(12345678);
personBuilder.setName("Admin");
personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10010").setType(Message.Person.PhoneType.MOBILE));
personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10086").setType(Message.Person.PhoneType.HOME));
personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10000").setType(Message.Person.PhoneType.WORK)); Message.Person person = personBuilder.build();
byte[] buff = person.toByteArray(); try {
Message.Person personOut = Message.Person.parseFrom(buff);
System.out.printf("Id:%d, Name:%s\n", personOut.getId(), personOut.getName()); List<Message.Person.Phone> phoneList = personOut.getPhoneList(); for (Message.Person.Phone phone : phoneList) {
System.out.printf("PhoneNumber:%s (%s)\n", phone.getNumber(), phone.getType());
} } catch (InvalidProtocolBufferException e) {
e.printStackTrace();
} System.out.println(Arrays.toString(buff)); }
}

运行结果

Id:12345678, Name:Admin
PhoneNumber:10010 (MOBILE)
PhoneNumber:10086 (HOME)
PhoneNumber:10000 (WORK)
[8, -50, -62, -15, 5, 18, 5, 65, 100, 109, 105, 110, 34, 7, 10, 5, 49, 48, 48, 49, 48, 34, 9, 10, 5, 49, 48, 48, 56, 54, 16, 1, 34, 9, 10, 5, 49, 48, 48, 48, 48, 16, 2] Process finished with exit code 0

转载请注明来源

05-11 21:55