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