Blogger 站內搜尋

顯示具有 Serializable 標籤的文章。 顯示所有文章
顯示具有 Serializable 標籤的文章。 顯示所有文章

2018年12月8日 星期六

Java SE 入門教學 - 物件序列化與反序列化

更新時間:12/08/2018

前言

一個類別只有實現了 Serializable 介面,它的物件才是可序列化的。因此如果要序列化某些類別的物件,這些類別就必須實作 Serializable 介面。而實際上,Serializable 是一個空介面,沒有什麼具體內容,它的目的只是簡單的標識一個類別的物件可以被序列化。好處:

(i) 比如說你的記憶體不夠用了,那計算機就要將內存裡面的一部分物件暫時的保存到硬碟中,等到要用的時候再讀入到記憶體中。在比如說你要將某個特定的物件保存到文件中,我隔幾天再把它拿出來用,那麼這時候就要實作 Serializable 介面。

(ii) 在進行 java 的 Socket 編程的時候,你有時候可能要傳輸某一類別的物件,那麼也就要實作 Serializable 介面。最常見的你傳輸一個字符串,它是 JDK 裡面的類別,也實作了 Serializable 介面,所以可以在網絡上傳輸。

(iii) 如果要通過遠程的方法(RMI)去調用一個遠程物件的方法,如在計算機 A 中調用另一台計算機 B 的物件的方法,那麼你需要通過 JNDI 服務獲取計算機 B 目標物件的引用,將物件從 B 傳送到 A,就需要實作 Serializable 介面。例如,在 web 開發中,如果物件被保存在了 Session 中,tomcat 在重啟時要把 Session 物件序列化到硬碟,這個物件就必須實作 Serializable 介面。如果物件要經過分佈式系統進行網絡傳輸或通過 rmi 等遠程調用,這就需要在網絡上傳輸物件,被傳輸的物件就必須實作 Serializable 介面。