對象的串行化和反串行化

串行化(serialization)是指將一個對象的當前狀態轉換成字節流(a stream of bytes)的過程,而反串行化(deserialization)則指串行化過程的逆過程,將字節流轉換成一個對象,打回原形。 
一、串行化的意義: 
1:解決Web應用程序的無狀態弊端 
一旦將某一對象串行化,得到的字節可以存儲在文件、數據庫,或內存中—— 只要是可以存儲的任何地方。需要恢復對象時,僅僅只需從它存儲的位置反串行化即可。對象固有的這種特性對於無狀態的Web應用程序是非常重要的,因爲它允許重要的狀態信息可以在用戶請求之間保留。 
2:應用程序邊界之間傳遞對象 
串行化也允許對象在應用程序邊界之間傳遞,編程人員可以將描述對象狀態的字節流在網絡上傳遞,並在另一端反串行化成一個匹配的對象。從本質上講,串行化允許對象以“數值”的方式傳遞給另一個應用程序。 
二:串行化對象 
在java中串行化對象必須: 
1、該對象的類必須實現Serializable接口 
2、該對象的串行化成員必須是非靜態成員變量,即不能保存任何的成員方法和靜態的成員變量,而且串行化保存的只是變量的值,對於變量的任何修飾符,都不能保存。而對於某些類型的對象,其狀態是瞬時的,這樣的對象是無法保存其狀態的,例如一個Thread對象,或一個FileInputStream對象,對於這些字段,我們必須用transient關鍵字標明 。 
注:保存任何的成員方法和靜態的成員變量沒有任何的意義,因爲,對象的類已經完整的保存了他們,如果再串行化他們還有什麼意義呢?呵呵 
3、要串行化一個對象,必須與一定的對象輸入/輸出流聯繫起來,通過對象輸出流將對象狀態保存下來,再通過對象輸入流將對象狀態恢復。 
三:具體實現 
1、串行化的對象:Person類 

Java代碼 

2、串行化和反串行化 

Java代碼 


3.測試結果 
erbao
10 
null 
因爲pwd transient ,不能被串行化 

 

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