在日常的應用開發中,我們可能需要讓某些物件離開記憶體空間,儲存到物理磁碟,以便長期儲存,同時也能減少對記憶體的壓力,而在需要時再將其從磁碟讀取到記憶體,比如將某個特定的物件儲存到檔案中,隔一段時間後再把它讀取到記憶體中使用,那麼該物件就需要實現序列化操作,在 Java 中可以使用 Serializable 介面實現物件的序列化,而在 android 中既可以使用 Serializable 介面實現物件序列化也可以使用 Parcelable 介面實現物件序列化,但是在記憶體操作時更傾向於實現 Parcelable 介面,這樣會使用傳輸效率更高效。接下來我們將分別詳細地介紹這樣兩種序列化操作。  瞭解序列化與反序列  序列化  由於存在於記憶體中的物件都是暫時的,無法長期駐存,為了把物件的狀態保持下來,這時需要把物件寫入到磁碟或者其他介質中,這個過程就叫做序列化。  反序列化  反序列化恰恰是序列化的反向操作,也就是說,把已存在在磁碟或者其他介質中的物件,反序列化(讀取)到記憶體中,以便後續操作,而這個過程就叫做反序列化。  概括性來說序列化是指將物件例項的狀態儲存到儲存媒體(磁碟或者其他介質)的過程。在此過程中,先將物件的公共欄位和私有欄位以及類的名稱(包括類所在的程式集)轉換為位元組流,然後再把位元組流寫入資料流。在隨後對物件進行反序列化時,將建立出與原物件完全相同的副本。  實現序列化的必要條件  一個物件要實現序列化操作,該類就必須實現了 Serializable 介面或者 Parcelable 介面,其中 Serializable 介面是在 java 中的序列化抽象類,而 Parcelable 介面則是 android 中特有的序列化介面,在某些情況下,Parcelable 介面實現的序列化更為高效,關於它們的實現案例我們後續會分析,這裡只要清楚知道實現序列化操作時必須實現 Serializable 介面或者 Parcelable 介面之一即可。  序列化的應用情景  主要有以下情況(但不限於以下情況)  1)記憶體中的物件寫入到硬碟;  2)用套接字在網路上傳送物件;  3)透過 RMI(RemoteMethodInvoke 遠端方法呼叫)傳輸物件;  Serializable  Serializable 是 java 提供的一個序列化介面,它是一個空介面,專門為物件提供標準的序列化和反序列化操作,使用 Serializable 實現類的序列化比較簡單,只要在類宣告中實現 Serializable 介面即可,同時強烈建議宣告序列化標識。  Parcelable  鑑於 Serializable 在記憶體序列化上開銷比較大,而記憶體資源屬於 android 系統中的稀有資源(android 系統分配給每個應用的記憶體開銷都是有限的),為此 android 中提供了 Parcelable 介面來實現序列化操作,Parcelable 的效能比 Serializable 好,在記憶體開銷方面較小,所以在記憶體間資料傳輸時推薦使用 Parcelable,如透過 Intent 在 activity 間傳輸資料,而 Parcelable 的缺點就使用起來比較麻煩。