今天無意中發現JavaBean類基本都要求實現了Serializable接口,以前只是知道序列化以後,可以通過io流的方式將對象序列化和反序列化,進行存取,但不知道爲什麼需要序列化,今天總結一下

今天無意中發現JavaBean類基本都要求實現了Serializable接口,以前只是知道序列化以後,可以通過io流的方式將對象序列化和反序列化,進行存取,但不知道爲什麼需要序列化,今天總結一下,方便以後可以查詢!
Java的"對象序列化"是指一個可以將實現了Serializable接口的對象轉換成一組byte,這樣日後要用這個對象時候,你就能把這些byte數據恢復出來,並據此重新構建那個對象了。
這一點甚至在跨網絡的環境下也是如此,這就意味着序列化機制能自動補償操作系統方面的差異。也就是說,你可以在Windows機器上創鍵一個對象,序列化之後,再通過網絡傳到Unix機器上,然後在那裏進行重建。你不用擔心在不同的平臺上數據是怎樣表示的,byte順序怎樣,或者別的什麼細節。

對象序列化是很有用的,因爲它能讓你實現"輕量級的persistence(lightweight persistence)"(瞭解hibernate的童鞋知道此處值得就是持久化操作)。所謂persistence是指,對象的生命週期不是由程序是否運行決定的;在程序的兩次調用之間對象仍然還活着。通過"將做過序列化處理的對象寫入磁盤,等到程序再次運行的時候再把它讀出來",你可以達到persistence的效果。之所以說"輕量級",是因爲你不能用像"persistent"這樣的關鍵詞來直接定義一個對象,然後讓系統去處理所有細節(雖然將來有可能會這樣)。相反,你必須明確地進行序列化(serialize)反序列化(deserialize)。如果你需要更爲正式的persistence功能,可以考慮Java Data Object( 簡稱是JDO)或Hibernate之類的工具.之所以要在語言里加入對象序列化是因爲要用它來實現兩個重要的功能。Java的遠程方法調用(Remote Method Invocation簡稱RMI)能讓你像調用自己機器上的對象那樣去調用其它機器上的對象。當你向遠程對象傳遞消息的時候,就需通過對象序列化來傳送參數和返回值了!
對JavaBean來說,對象序列化也是必不可少的。Bean的狀態信息通常是在設計時配置的。這些狀態信息必須保存起來,供程序啓動的時候用;對象序列化就負責這個工作。
序列化一個對象還是比較簡單的,只要讓它實現Serializable接口就行了。要想序列化一個對象,你必須先創建一個OutputStream,然後把它嵌進ObjectOutputStream。這時,你就能用writeObject( )方法把對象寫入OutputStream了。讀的時候,你得把InputStream嵌到ObjectInputStream裏面,然後再調用readObject( )方法。不過這樣讀出來的,只是一個Object的reference,因此在用之前,還得先下傳。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章