物件序列化

2021-09-22 12:48:49 字數 1409 閱讀 7206

物件是存在於記憶體中的。有時候我們需要將物件儲存到硬碟上,又有時我們需要將物件傳輸到另一台計算機上等等這樣的操作。這時我們需要將物件轉換為乙個位元組序列,而這個過程就稱為物件序列化。相反,我們有這樣乙個位元組序列需要將其轉換為對應的物件,這個過程就稱為物件的反序列化。

使用oos實現物件序列化

objectoutputstream是用來對物件進行序列化的輸出流。其實現物件序列化的方法為:

— void writeobject(object o)該方法可以將給定的物件轉換為乙個位元組序列後寫出

使用ois實現物件反序列化

objectinputstream是用來對物件進行反序列化的輸入流。其實現物件反序列化的方法為:

— object readobject()該方法可以從流中讀取位元組並轉換為對應的物件。

serializable介面

objectoutputstream在對物件進行序列化時有乙個要求,就是需要序列化的物件所屬的類必須實現serializable介面。

實現該介面不需要重寫任何方法。其只是作為可序列化的標誌。

通常實現該介面的類需要提供乙個常量serialversionuid,表明該類的版本。若不顯式的宣告,在物件序列化時也會根據當前類的各個方面計算該類的預設serialversionuid,但不同平台編譯器實現有所不同,所以若想跨平台,都應顯式的宣告版本號。

如果宣告的類的物件序列化存到硬碟上面,之後隨著需求的變化更改了類的屬性(增加或減少或改名),那麼當反序列化時,就會出現invalidclas***ception,這樣就會造成不相容的問題。

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

transient關鍵字

物件在序列化後得到的位元組序列往往比較大,有時我們在對乙個物件進行序列化時可以忽略某些不必要的屬性,從而對序列化後得到的位元組序列「**」。

被transient關鍵字修飾的屬性在序列化時其值將被忽略。

實現emp的序列化

實現emp的反序列化

物件序列化 反序列化

必須新增引用 using system.io using system.runtime.serialization using system.runtime.serialization.formatters.binary 方法 region 物件序列化 物件序列化 任意物件 字串 public st...

物件 序列化 反序列化

public class eventmessage 資訊提示類 型別1 操作日誌2 安全日誌 標題 內容 icon型別 url 執行script指令碼字串 需加 public static void messagebox int m type,string m title,string m body...

物件序列化

using system using system.io using system.diagnostics using system.reflection using system.runtime.serialization using system.runtime.serialization.fo...