1. 程式人生 > >Kryo序列化學習筆記

Kryo序列化學習筆記

參考資料:https://github.com/EsotericSoftware/kryo#quickstart

開始

Kryo是一種基於java的快速高效序列化框架,該框架的目標是速度,效率以及容易使用的API。專案可以在任何時間將物件永久化到檔案,資料庫或者網路。

先看一個最簡單的例子

Kryo kryo = new Kryo();
try {
	Output output = new Output(new FileOutputStream("file.bin"));
	String strobj = "hello world";
	kryo.writeObject(output, strobj);
	output.close();

	Input input = new Input(new FileInputStream("file.bin"));
	String someObject = kryo.readObject(input, String.class);
	System.out.println(someObject);
	input.close();
} catch (FileNotFoundException e) {
	e.printStackTrace();
}



該程式能夠將String物件序列化到檔案,然後在從檔案中反序列化到記憶體物件

IO

Output物件繼承至OutputStream,可以通過其將資料寫入到它內部的bytebuffer。如果給這個Output設定了一個OutputStream的話,當它內部的buffer滿了的話,它會將位元組資料自動的flush到輸出流。Output有很多方法用來將原語和字串寫成位元組,它提供的功能類似於DataoutputStream,BufferedOutputStream,FilterOutputStream。

因為Output會將資料快取到內部的位元組陣列中,所以當呼叫完寫資料操作後,務必呼叫flush(),close()函式確保資料傳送到輸出流中。

Input類是一種InputStream,可以從一個位元組陣列中讀取資料,這個快取陣列可以直接設定。如果給Input設定了InputStream的話,它將從輸入流中讀取資料來fill快取陣列。Input具有很多方法將位元組轉換成原語和字串。它提供的功能類似DataInputStream, BufferedInputStream, FilterInputStream, andByteArrayInputStream.

Serialzer

Kryo是一種序列化框架,它不強制使用某種模式或者操作特點的資料,這些規範都交由Serializers自己來處理。Serializers提供了預設操作資料的各種方法。如果不是特別用途的話,它可以部分或全部的替代。框架提供的Serializers為大多數的物件提供了讀寫操作的方法,如果需要的的話,自己實現一個Seralizer也十分容易,框架提供了Serialzer抽象類,該類提供了物件轉位元組和位元組轉物件的方法。

public class ColorSerializer extends Serializer<Color> {
    public void write (Kryo kryo, Output output, Color object) {
        output.writeInt(object.getRGB());
    }

    public Color read (Kryo kryo, Input input, Class<T> type) {
        return new Color(input.readInt(), true);
    }
}