1 android 中的對象序列化
序列化的目的是儲存或傳輸資料,android中序列化目的具體包括:
- 将對象持久化到本地(儲存在檔案或者資料庫中)友善下次複用。
- 序列化之後,利用資料流在網絡中傳輸。
- 元件間傳遞資料。
2 序列化手段
java中最常用的序列化辨別是Serializable,定義一個Bean時實作Serializable接口,不需要實作什麼方法,Serializable從源碼看沒有任何方法,但是注釋說明很多很多。Serializable可以實作資料持久化,儲存對象到本地檔案、資料庫、網絡流傳輸。
Parcelable的設計初衷是因為Serializable效率過慢,為了在程式内不同元件間以及不同Android程 序間(AIDL)高效的傳輸資料而設計,這些資料僅在記憶體中存在,Parcelable是通過IBinder通信的消息的載體。
Serializable主要用于持久化存儲對象,Parcelable主要用于序列化傳輸對象。
3 原理效率簡單說明
原理:
Serializable由于使用了反射機制,在序列化操作的時候會産生大量的臨時變量,進而導緻GC的頻繁調用。
Parcelable是以Ibinder作為資訊載體的,記憶體開銷較小。
特點:
在讀寫資料的時候,Parcelable是在記憶體中直接進行讀寫,
Serializable是通過使用IO流的形式将資料讀寫入在硬碟上。
側重:
雖然Parcelable的性能要強于Serializable,但Parcelable無法将資料進行持久化,是以讓要使用Serializable将資料儲存在磁盤的時候。
Parcelable的性能比Serializable好,記憶體開銷小,是以android中在記憶體間資料傳輸時推薦使用Parcelable,祖健健傳遞資料。
Serializable可将資料持久化友善儲存,是以在需要儲存或網絡傳輸資料時選擇Serializable。
使用:
Serializable實作較簡單,隻需要實作接口,提供SerializableID即可,如果沒有序列化id,如果對象某些字段修改或添加,會導緻已存儲的資料無法讀取。
Parcelable則需要實作writeToParcel、describeContents函數以及靜态的CREATOR變量,實際上就是将如何分解群組合對象(打包和解包)的工作自己來定義,而序列化的這些操作完全由底層實作。
具體使用代碼網上很多,這裡就不貼出了。