Java序列化面試題-整理


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 類型。



 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM