pb好处,不在本文的说明范围,可直接参考官方文档(Link)。 这里记录笔者一个例程。 具体如下:
环境
idea
步骤
- 创建
addressbook.proto文件。入下:
syntax = "proto2";
package docType;
option java_package = "docType";
option java_outer_classname = "AddressBookProtos";
message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
- 生成AddressBookProtos类
命令格式如下protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
- 创建测试用例
这个测试用例,是先创建一个AddressBook,存入文件,然后在从文件中读取。包括了整个pb使用流程。
代码如下:
import docType.AddressBookProtos;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class PbTest {
public static void main(String[] args) throws Exception {
String file = "./out/pb";
creatPbAndSave(file);
AddressBookProtos.AddressBook.Builder addressBook = AddressBookProtos.AddressBook.newBuilder();
try {
addressBook.mergeFrom(new FileInputStream(file));
} catch (FileNotFoundException e) {
System.out.println(args[0] + ": File not found. Creating a new file.");
}
System.out.println(addressBook.getPeople(0).getEmail());
}
private static void creatPbAndSave(String filePath) throws IOException {
AddressBookProtos.Person john =
AddressBookProtos.Person.newBuilder()
.setId(1234)
.setName("John Doe")
.setEmail("jdoe@example.com")
.addPhones(
AddressBookProtos.Person.PhoneNumber.newBuilder()
.setNumber("555-4321")
.setType(AddressBookProtos.Person.PhoneType.HOME)
.build())
.build();
AddressBookProtos.AddressBook addressBook =
AddressBookProtos.AddressBook.newBuilder()
.addPeople(0, john)
.build();
FileOutputStream output = new FileOutputStream(filePath);
addressBook.writeTo(output);
output.close();
}
}