Java protobuf
java 用 protobuf
protobuf 是 google 開發的,基本用於做序列化和反序列化,其資料格式為 byte,不像
json 或 xml 是文字,故其效能高於 json 或 xml,但可讀性遠低於其他的格式。
環境
上 github (https://github.com/protocolbuffers/protobuf/releases)
下載 protobuf 的工具,此處用的是 Protocol Buffers v3.17.2 (下載 protoc-3.17.2-win64.zip)
在 protoc-3.17.2-win64.zip 中,在 bin 這個資料夾裡面有一個 protoc.exe 的檔案。
開發環境是 intellij idea。
protobuf 用的 jar 會用 maven 的方式載入。
.proto 檔的語法參考 https://developers.google.com/protocol-buffers
過程
建立一個 persion.proto 檔 (看要放在 project 裡或不放都可以)
protobuf 有分 2 跟 3 兩個不同的版本,兩個版本間支援的語法有些不同,當有使用到
protobuf 2 的語法時,要指定 syntax = "proto2",當語法全為 protobuf 3 所支援
的語法時,倒是可以省略掉 syntax 這一行。
persion.proto
syntax = "proto2";
message Person {
required string name = 1;
required int32 age = 2;
optional string address = 3;
repeated string email = 4;
}
在 cmd 中執行
E:\protoc-3.17.2-win64\bin>protoc.exe --java_out=C:\ test.proto
然後就會生成一個 Test.java 的檔案在 C:\ 下,在把這個檔案放到 project 裡去
在 Test.java 中補上 package 的部份
設定 maven 的 POM 檔,加入 protobuf 的 dependency
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.5.0</version>
</dependency>
使用 protobuf
public static void main( String[] args ) throws IOException {
// 模擬序列化
Persion.Person.Builder personBuilder = Persion.Person.newBuilder();
personBuilder.setName("AAA");
personBuilder.setAge(12);
personBuilder.addEmail("email1");
personBuilder.addEmail("email2");
Persion.Person p = personBuilder.build();
// 寫到 stream
ByteArrayOutputStream output = new ByteArrayOutputStream();
p.writeTo(output);
// 模擬反序列化
byte[] byteAry = output.toByteArray();
ByteArrayInputStream input = new ByteArrayInputStream(byteAry);
Persion.Person p2 = Persion.Person.parseFrom(input);
}
沒有留言:
張貼留言