【Java】Java对象序列化I/O体系总结
生活随笔
收集整理的這篇文章主要介紹了
【Java】Java对象序列化I/O体系总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對象序列化體系概述
- 通過使用ObjectInputStream和ObjectOutputStream類保存和讀取對象的機制叫做序列化機制
- 序列化與反序列化
- 對象序列化是指將對象轉換為字節序列的過程
- 對象反序列化則是根據字節序列恢復對象的過程
- 序列化一般用于以下場景:
- 永久性保存對象,保存對象的字節序列到本地文件中
- 通過序列化對象在網絡中傳遞對象
- 通過序列化在進程間傳遞對象
支持序列化的接口和類
- 序列化的過程,是將任何實現了Serializable接口或Externalizable接口的對象通過ObjectOutputStream類提供的相應方法轉換為連續的字節數據,這些數據以后仍可通過ObjectInputStream類提供的相應方法被還原為原來的對象狀態,這樣就可以將對象完成的保存在本地文件中,或在網絡間、進程間傳遞
- 支持序列化的接口和類
- Serializable接口
- Externalizable接口
- ObjectInputStream類
- ObjectOutputStream類
Serializable接口
只有一個實現Serializable接口的對象可以被序列化工具存儲和恢復。
Serializable接口沒有定義任何屬性或方法。它只用來表示一個類可以被序列化。
如果一個類可以序列化,它的所有子類都可以序列化。
Externalizable接口
可以讓需要序列化的類實現Serializable接口的子接口Externalizable。
Externalizable接口表示實現該接口的類在序列化中由該類本身來控制信息的寫出和讀入。
ObjectOutputStream類
ObjectOutputStream類繼承OutputStream類,并實現了ObjectOutput接口,它負責向流寫入對象。
構造方法
ObjectOutputStream(OutputStream out)主要方法
writeObject(Object obj) // 向指定的OutputStream中寫入對象objObjectInputStream類
ObjectInputStream類繼承InputStream類,并實現了ObjectInput接口,它負責從流中讀取對象 。
構造方法
ObjectInputStream(InputStream in)主要方法
readObject(Object obj) // 從指定的InputStream中讀取對象對象序列化的條件
- 該對象類必須實現Serializable接口
- 如果該類有直接或者間接的不可序列化的基類,那么該基類必須 有一個默認的構造器。該派生類需要負責將其基類中的數據寫入 流中
- 建議所有可序列化類都顯式聲明serialVersionUID值
序列化與serialVersionUID
這個屬性,在IDEA里是不主動提示的,但Eclipse中會提示的,并建議開發者自己指定或者使用默認值。
默認值是這么寫的:
private static long serialVersionUID = 1L;serialVersionUID在反序列化過程中用于驗證序列化對象的發送者和接收者是否為該對象加載了與序列化兼容的類。
如果接收者加載的該對象的類的serialVersionUID與對應的發送者的類的版本號不同,則反序列化將會拋出InvalidClassException。
序列化與transient關鍵詞
《舉例淺談Java關鍵詞transient的使用》
封裝序列化文件操作工具
《Java封裝序列化文件工具類》
總結
以上是生活随笔為你收集整理的【Java】Java对象序列化I/O体系总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JVM】javap命令行分析揭示boo
- 下一篇: java美元兑换,(Java实现) 美元