序列化是一種用來處理對象流
的機制。java
所謂對象流:就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做
,也可將流化後的對象傳輸於網絡
之間。數據庫
序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。編程
序列化的實現:將須要被序列化的類實現Serializable接口(標記接口)
,該接口沒有須要實現的方法,implements Serializable只是爲了標註
該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象;接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。網絡
何時使用序列化呢?app
實現分佈式對象
。RMI(即遠程調用Remote Method Invocation)
要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時同樣。複製對象自己及引用的對象自己
。序列化一個對象可能獲得整個對象序列。反序列化
就能夠將原先的類還原到內存中。也能夠將類序列化爲流數據進行傳輸。總的來講就是將一個已經實例化的類轉成文件存儲
,下次須要實例化的時候只要反序列化便可將類實例化到內存中並保留序列化時類中的全部變量和狀態。變成同樣的東西
,就能夠進行通用的格式傳輸或保存,傳輸結束之後,要再次使用,就進行反序列化還原,這樣對象仍是對象,文件仍是文件由於JAVA中要將對象序列化爲 流的形式
進行傳輸。分佈式
因此涉及到數據傳輸或者存儲的類,嚴格意義上來講都要加上序列化ID,這也是一種良好的編程習慣
。