Java Protostuff 自定義序列化
阿新 • • 發佈:2018-12-14
雖然 Java 提供內建的序列化 API Serializable ,但其效率並不是最高的 Google 提供了一個效率很高的序列化 API Protobuf ,但其使用過於複雜 開源社群在 Protobuf 的基礎上封裝出 Protostuff ,在不丟失效率的前提上,讓使用步驟變得更簡單 一般情況下 Protostuff 序列化後的資料大小是 Serializable 的 1/10 之一,速度更是兩個量級以上
更多精彩
依賴
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId >protostuff-core</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-runtime</artifactId>
<version>1.1.1</version>
</dependency>
建立 Schema 序列化規則物件
- 規則物件只接受任何帶 set/get 方法的 POJO 物件
private RuntimeSchema<RecordDTO> schema = RuntimeSchema.createFrom(RecordDTO.class);
資料序列化
public void setRecord(RecordDTO record) {
// 將未序列化的物件資料通過 schema 規則進行序列化
// LinkedBuffer 快取器的作用是當物件資料過大時,可以對資料進行快取,從而實現分佈序列化
byte[] bytes = ProtobufIOUtil.toByteArray(record, schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
}
資料反序列化
public RecordDTO getRecord(byte[] bytes) {
// 空的物件資料
RecordDTO record = schema.newMessage();
// 將被序列化的物件資料通過 schema 規則反序列化轉換到空的物件資料中
ProtobufIOUtil.mergeFrom(bytes, record, schema);
return record;
}