Java序列化與反序列化

2021-08-20 13:45:29 字數 975 閱讀 8386

當需要把乙個物件儲存在檔案、資料庫中,或是將其在網路上傳播的時候,就需要對其進行序列化。序列化和反序列化就是分別把物件轉成位元組序列和把位元組序列恢復成物件的過程。實現serializable介面是應用序列化與反序列化的一種方式。這個介面沒有方法,這種叫標記介面,表示實現這個介面的類可以被序列化。若類中的某個屬性不想被序列化時,可以加上transient關鍵字修飾,這樣在序列化時,這個屬性就會按其型別的預設值被序列化(如int的預設值為0)。

serializable介面是由jdk來控制物件的序列化,也可以使用externalizable介面,這樣就能自主控制物件的序列化過程,需要重寫readexternal和writeexternal方法。

使用序列化與反序列化時還要用到物件輸入輸出流(objectoutputstream和objectinputstream),使用這兩個流的時候需要與檔案輸入輸出流進行套接。

以下是示例**,執行後控制台會輸出car,可以看到color屬性並不是black,而是字串的預設值,因為car類中color屬性被transient修飾。另外,該例項中使用了不少流,這些流都需要關閉,關閉時應遵循先開啟的後關閉的原則。並且關閉前應先判斷其是否為空,關閉乙個未開啟的流會丟擲異常。

public class serialiabletest  catch (filenotfoundexception e)  catch (ioexception e)  catch (classnotfoundexception e)  finally 

if (fis != null)

if (oos != null)

if (fos != null)

} catch (ioexception e) }}

}class car implements serializable ';

}public car(string brand, string color, bigdecimal price)

}

java序列化與反序列化

參考 總結 1 被transient 修飾的屬性,是不會被序列化的 2 靜態屬性不會被序列化 3 序列化與反序列化的serialversionuid要一致 4 objectoutputstream代表物件輸出流 它的writeobject object obj 方法可對引數指定的obj物件進行序列化...

Java序列化與反序列化

private static final long serialversionuid 1l 序列化操作的時候系統會把當前類的serialversionuid寫入到序列化檔案中,當反序列化時系統會去檢測檔案中的serialversionuid,判斷它是否與當前類的serialversionuid一致,...

java 序列化 反序列化

序列化 bytearrayoutputstream bytearrayoutputstream new bytearrayoutputstream objectoutputstream objectoutputstream null try catch exception e finally byt...