1.什么是序列化?
•序列化:序列化是將對象轉化為字節流。
•反序列化:反序列化是將字節流轉化為對象。
2.序列化的用途?
•序列化可以將對象的字節序列持久化-保存在內存、文件、數據庫中。
•在網絡上傳送對象的字節序列。
•RMI(遠程方法調用)
3.序列化和反序列化
•序列化:java.io.ObjectOutputStream
類的 writeObject()
方法可以實現序列化
•反序列化:java.io.ObjectInputStream
類的 readObject()
方法用於實現反序列化。
Serializable 接口
被序列化的類必須屬於 Enum、Array 和 Serializable 類型其中的任何一種。
如果不是 Enum、Array 的類,如果需要序列化,必須實現 java.io.Serializable 接口,否則將拋出 NotSerializableException 異常。
這是因為:在序列化操作過程中會對類型進行檢查,如果不滿足序列化類型要求,就會拋出異常。
4.serialVersionUID
serialVersionUID 有什么作用,如何使用 serialVersionUID?
serialVersionUID 是 Java 為每個序列化類產生的版本標識。它可以用來保證在反序列時,發送方發送的和接受方接收的是可兼容的對象。如果接收方接收的類的 serialVersionUID 與發送方發送的 serialVersionUID 不一致,會拋出 InvalidClassException。
如果可序列化類沒有顯式聲明 serialVersionUID,則序列化運行時將基於該類的各個方面計算該類的默認 serialVersionUID 值。盡管這樣,還是建議在每一個序列化的類中顯式指定 serialVersionUID 的值。因為不同的 jdk 編譯很可能會生成不同的 serialVersionUID 默認值,從而導致在反序列化時拋出 InvalidClassExceptions 異常。
serialVersionUID 字段必須是 static final long 類型。