人生若只如初見,何事秋風(fēng)悲畫扇。
In life there are very rare chances that you'll meet the person you love and loves you in return. So once you have it don't ever let go, the chance might never come your way.
類通過實(shí)現(xiàn) java.io.Serializable 接口以啟用其序列化功能。未實(shí)現(xiàn)此接口的類將無法使其任何狀態(tài)序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。序列化接口沒有方法或字段,僅用于標(biāo)識可序列化的語義。 Java的"對象序列化"能讓你將一個(gè)實(shí)現(xiàn)了Serializable接口的對象轉(zhuǎn)換成一組byte,這樣日后要用這個(gè)對象時(shí)候,你就能把這些byte數(shù)據(jù)恢復(fù)出來,并據(jù)此重新構(gòu)建那個(gè)對象了。 要想序列化對象,你必須先創(chuàng)建一個(gè)OutputStream,然后把它嵌進(jìn)ObjectOutputStream。這時(shí),你就能用writeObject( )方法把對象寫入OutputStream了。 writeObject 方法負(fù)責(zé)寫入特定類的對象的狀態(tài),以便相應(yīng)的 readObject 方法可以還原它。通過調(diào)用 out.defaultWriteObject 可以調(diào)用保存 Object 的字段的默認(rèn)機(jī)制。該方法本身不需要涉及屬于其超類或子類的狀態(tài)。狀態(tài)是通過使用 writeObject 方法或使用 DataOutput 支持的用于基本數(shù)據(jù)類型的方法將各個(gè)字段寫入 ObjectOutputStream 來保存的。
讀的時(shí)候,你得把InputStream嵌到ObjectInputStream里面,然后再調(diào)用readObject( )方法。不過這樣讀出來的,只是一個(gè)Object的reference,因此在用之前,還得先下傳。readObject 方法負(fù)責(zé)從流中讀取并還原類字段。它可以調(diào)用 in.defaultReadObject 來調(diào)用默認(rèn)機(jī)制,以還原對象的非靜態(tài)和非瞬態(tài)字段。 defaultReadObject 方法使用流中的信息來分配流中通過當(dāng)前對象中相應(yīng)命名字段保存的對象的字段。這用于處理類發(fā)展后需要添加新字段的情形。該方法本身不需要涉及屬于其超類或子類的狀態(tài)。狀態(tài)是通過使用 writeObject 方法或使用 DataOutput 支持的用于基本數(shù)據(jù)類型的方法將各個(gè)字段寫入 ObjectOutputStream 來保存的。 看一個(gè)列子:
?
最后結(jié)果如下:??? node 0? node 1node 2node 3? node 4node 5node 6
LiLy is 惠止南國 可以看到,在序列化的時(shí)候,writeObject與readObject之間的先后順序。readObject將最先write的object read出來。用數(shù)據(jù)結(jié)構(gòu)的術(shù)語來講就姑且稱之為先進(jìn)先出吧! 在序列化時(shí),有幾點(diǎn)要注意的: 1:當(dāng)一個(gè)對象被序列化時(shí),只保存對象的非靜態(tài)成員變量,不能保存任何的成員方法和靜態(tài)的成員變量。 2:如果一個(gè)對象的成員變量是一個(gè)對象,那么這個(gè)對象的數(shù)據(jù)成員也會被保存。 3:如果一個(gè)可序列化的對象包含對某個(gè)不可序列化的對象的引用,那么整個(gè)序列化操作將會失敗,并且會拋出一個(gè)NotSerializableException。我們可以將這個(gè)引用標(biāo)記為transient,那么對象仍然可以序列化 還有我們對某個(gè)對象進(jìn)行序列化時(shí)候,往往對整個(gè)對象全部序列化了,比如說類里有些數(shù)據(jù)比較敏感,不希望序列化,一個(gè)方法可以用transient來標(biāo)識,另一個(gè)方法我們可以在類里重寫
這二個(gè)方法! 示例:
--(add on 2006/6/28) ?
參考資料:JDK1.5 API DOC 孫鑫老師資料
Powered by: BlogJava Copyright © Jkallen