敢於java的序列化幾點小說明

這是開始文章http://blog.csdn.net/tlycherry/article/details/8986720。(我引用他人的)最少你要瞭解到

1、什麼是序列化

2、對象流是什麼(可以思考下原型模式)

3、序列化能做什麼

4、實現序列化的方法

5、序列化的特點

進入正題:

序列化定義:用來將對象編碼成字節流,並從字節流編碼中重新構建對象。

序列化的好處:一旦一個對象被序列化,它的編碼就可以從一臺正在運行的虛擬機被傳遞到另一臺虛擬機上,或者被存儲到磁盤上,供以後反序列化使用。(對象序列化是java的一個特徵,通過該特徵可以將對象寫作一組字節碼,當在其他位置讀到這些字節碼時,可以依此創建一個新的對象,而且新對象的狀態與原對象完全相同。*

序列化的侷限/代價:1、實現序列化接口的類,被髮布後,修改的靈活性大大降低。序列化會使得類的演變受到限制,因爲序列版本UID

2、增加了出現bug和安全漏洞的可能性。序列化機制是一種語言外的對象創建機制(*是解釋)

3、隨着發行版本,相關測試負擔增加。當一個課序列化的類被修訂後,要檢查是否可以“在新的版本中序列化一個實例,然後在舊版本中反序列化”反之亦然。

實現序列化的場景:1、如果一個類要加入到某個框架中,並且該框架依賴序列化來實現對象傳輸或者持久化,這個類需要實現序列化接口。

2、一個類要成爲另一個類的組件,並且後者必須實現序列化接口,前者實現序列化接口它就更容易被後者使用。

3、爲了繼承而設計的類應該儘量少的去實現序列化接口,用戶接口也應該儘可能的少繼承序列化接口。如果一個專門爲了繼承而設計的類是不可以序列化的,那就不要編寫可以序列化的子類。特別是父類沒有提供可以訪問的無參構造方法,子類也不可能做到序列化

在爲了繼承而設計的類中,真正實現了序列化接口的有Throwable類,Component類和HttpServlet抽象類。(是不是之前都沒想過爲什麼要實現序列化接口 就直接借用eclipse這種軟件生成了呀)

最好在所有的約束關係都已經建立的情況下再創建對象。如果微力建立這些約束關係而要求客戶端提供一些數據,這實際上就排除了使用無參構造器的可能性。盲目地爲了一個類增加無參構造器和單獨的初始化方法,而它的約束關係仍由其他構造器來建立,這樣會使得該類的狀態空間更加複雜,並增加了出錯的可能性。

一點小經驗:Date和Biginteger,大多數集合類應該實現序列化接口,代表活動實體的類不應該實現序列化接口。

實現序列化的時候要慎重。

下一篇講自定義的序列化形式



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章