1. 程式人生 > >對象流--對象的序列化

對象流--對象的序列化

不兼容 版本號 序列 操作 就會 必須 變化 stream object

1、對象是存在於內存中的(堆內存),有時候我們需要將對象保存在硬盤上,又有時我們需要將對象保存在另一臺計算機上等等這樣的操作,

這時候我們需要將對象轉化為一個字節序列,而這個過程就是對象的序列化,相反我麽又這樣一個字節序列需要將其轉化為對應的對象,

這個過程就是對象的反序列化。

2、對象-----序列化---字節序列

字節序列---反序列化---對象

3、使用OOS實現對象的序列化------ObjectOutputStream是用來對對象進行序列化的輸出流,

其實現對象序列化的方法為: -void writeObject(Object o)

該方法可以將給定的對象轉化為一個字節序列後寫出,

4、使用 OIS實現對象的反序列化---ObjectInputStream是用來對對象進行反序列化的輸入流,

其實現對象反序列化打方法為: -Object readObject()

該方法 可以從流中讀取字節並轉化為對象

5、Serialiable接口

ObjectOutputSream在對對象進行序列化時有一個要求,就是需要序列化的對象所屬的類必須實現Serialiable接口,

實現該接口不需要實現任何方法,其只是作為可序列化的標誌,

通常實現該接口的類,需要提供一個常量serialVersionUid,表名該類的版本,若不顯示的聲明,在對象序列化時也會根據當前類的各個方面計算該類的默認serialVersionUid,

但不同平臺編譯器實現有所不同,所以如果想跨平臺,都應有顯示的聲明版本號。

6、Serialiable接口

如果聲明的類的對象序列化存到硬盤上面,之後隨著需求的變化更改了類的屬性(增加或減少或更改)呢麽反序列化時就會出現InvalidClassException,這樣就會造成不兼

容問題,但當serialVersionUid相同時,它就會將不一樣的field以type的預設值反序列化,可避免不兼容問題。

對象流--對象的序列化