1. 程式人生 > >Java Protostuff 自定義序列化

Java Protostuff 自定義序列化

雖然 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 序列化規則物件

  1. 規則物件只接受任何帶 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;
}