java序列化與反序列化

之前看公司RMI服務裏多數類都實現了序列化接口 (implements Serializable),但確怎麼也不知道序列化是怎麼一回事,上網查了很多序列化的概念,但那些概念太抽象了,還是無法理解,直到今天,終於有了一些自己的理解,在這裏寫出來,希望對與我存在同樣困擾的朋友們能有所幫助。
我們都知道,當我們new一個對象的時候,Java就會在內存中創建一個相應的對象供我們後續使用。如果我們把這個Java程序關掉的話,那麼這個對象也就隨着我們程序的關閉而消失,如何才能在這種情況下繼續保存這個對象呢?這就是Java序列化要做的事情。簡單地說,Java對象列化就是要把內存中的Java對象保存下來(持久化),以便可以在網絡上傳輸或今後繼續使用這個對象中的數據。
那麼對象序列化到底做了哪些事呢?其實很簡單,一個對象對於我們來說的意義其實就是對象裏保存的那些數據,序列化就是把這些數據轉換成二進制表示的對象流,你可以把它通過網絡傳輸到遠程,當然,也可以把這些信息保存在本地的文件裏。下面給出一個最簡單的Java的序列化與反序列化的例子,看懂這個例子,相信你應該也能跟我一樣,大概理解這是怎麼一回事了。
而後我們要實例化一個Person對象,把我們實例化出來的這個對象序列化,並把序列化後的對象流保存到文件中去:
這樣,我們就把序列化後的二進制對象流保存到 Person.tmp的文件中去了(特別要注意這裏的oos.writeObject()方法,這個方法就是實現把obj對象序列化的方法)。你可以打開生成的這個文件查看,不過我們是看不懂這裏面的信息的,因爲這是二進制數據啊。
那我們要怎麼才能看懂這些二進制數據呢?這就要用到我們的反序列化了。反序列化就是要把序列化後的二進制數據反向解析成可以正常使用的Java對象。現在讓我們來把剛纔的那個對象反序列化一下吧
就是通過這個語句把序列化後的對象流反序列化成正常的Java對象的。
以上就是本人對Java對象序列化與反序列化的理解,純屬入門級別的理解
發佈了39 篇原創文章 · 獲贊 0 · 訪問量 1307
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章