對象流--對象的序列化
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的預設值反序列化,可避免不兼容問題。
對象流--對象的序列化