關於java 序列化的原理

      對程序員來講,Serializable 接口 一直隱藏在我們的代碼中,但序列化操作已經封裝在我們所使用的框架中,所以序列化已經無需我們親自實現Serializable接口。但是每次深入瞭解別人的代碼或現使用的框架,對他們使用了Serializable總是特別迷惑。下面我將已程序媛的角度對Serializable接口進行講解:

     1.對序列化做簡單的定義。 Serializable接口 在jdk中 定義爲 java.io.Serializable,此接口沒有方法、沒有屬性,僅僅用於標識可序列化。簡單來說就是將對象示例保存到文件、數據庫,進行傳輸。需要用時讀磁盤或數據庫將數據還原。

     2.我們平時在什麼場景下用到了序列化。其實我們平時就有用到很多序列化,只是我們不知道它就是序列化而已。目前我所瞭解到的序列化方式有:二進制、xml、json。其中二進制傳輸比如圖片、peson實例等,通過outputStream、inputStream進行寫入和讀入。

     3. 關於private static final long serialVersionUID = 7835683779754L。大家對這語句已經太熟悉了。首先講講jdk中序列化的原理。比如下面:

舊對象 :public class Person implements Serializable (){ private String name;}    新對象:public class Person implements  Serializable(){ private String name1;}. 改變了裏面的屬性名。當對象實現  Serializable時,對象已經默認產生了一個serialVersionUID。當你改變屬性名時,系統又會重新生成一個serialVersionUID。所以當舊對象要反序列爲新對象時,因爲SUID不同就會出現報錯:java.io.InvalidClassException:Employee; local class incompatible。很多時候爲了避免因爲新對象屬性的增加,我們常常自定義一個serialVersionUID。兼容舊對象的讀取,改變或新增的屬性名默認爲fasle、0、null。

       4.總結。很多時候我們進行的數據傳輸、保存文件都是使用或間接使用了序列化的接口。

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