最近想看看Java底層點的東西,一看就看到了Java的對象序列化。java
剛開始看以爲很頭痛。不知道序列化爲什麼方神聖,看起來玄乎其玄的,可是看了java對它的定義就以爲原來對象序列化是so easy的。下面說說我對序列化的理解:網絡
當咱們把一個對象經過網絡傳遞到遠程端,不少人多是用RMI遠程方法調用,可是具體的RMI是如何實現的咱們很模糊很費解。這就說明了「對象序列化」的做用,就是把一個對象經過網絡傳到遠程端。對象
對象的序列化就是將對象的狀態存儲起來,先講對象的字段和屬性以及類名轉換爲字節流,而後把字節流寫入數據流。對象序列化的目的是將對象持久化,通過持久化的對象能夠從一個地方傳達到另外一個地方。經過對象的反序列化獲得與原對象徹底相同的副本。接口
只有實現了java.io.Serializable或者Externalizable接口的類的對象才能被序列化。實現Externalizable接口的類徹底由自身來控制序列化的行爲,而僅實現Serializable接口的類能夠採用默認的序列化方式。it
對象序列化包括以下步驟:io
1.建立一個對象輸出流,能夠包裝一個其餘類型的目標輸出流,如文件輸出流。經過對象輸出流的writeObject(obj)方法寫對象:序列化
ObjectOutputStream爲對象輸出流,它的writeObject(obj)方法可對參數指定的obj對象進行序列化方法
對象的反序列化:數據
1.建立一個對象輸入流,經過對象輸入流ObjectInputStream的readObject(obj)方法讀取對象。文件