1、作用
Serializable的作用是為了保存對象的屬性到本地文件、數據庫、網絡流、rmi以方便數據傳輸,當然這種傳輸可以是程序內的也可以是兩個程序間的。而Android的Parcelable的設計初衷是因為Serializable效率過慢,為了在程序內不同組件間以及不同Android程序間(AIDL)高效的傳輸數據而設計,這些數據僅在內存中存在,Parcelable是通過IBinder通信的消息的載體。
從上面的設計上我們就可以看出優劣了。
2、效率及選擇
Parcelable的性能比Serializable好,在內存開銷方面較小,所以在內存間數據傳輸時推薦使用Parcelable,如activity間傳輸數據,而Serializable可將數據持久化方便保存,所以在需要保存或網絡傳輸數據時選擇Serializable,因為android不同版本Parcelable可能不同,所以不推薦使用Parcelable進行數據持久化
3、區別
基本上就是Parcelable是內存序列化,快速,但是持久化麻煩(不建議),Serializable屬于I/O級別序列化和反序列化,可以持久化保存。
區別
4、Serializable中serialVersionUID
serialVersionUID默認的話如果刪除或修改了成員變量,會導致當前類hash值賦值給serialVersionUID和以前hash不一樣導致反序列化失敗。指定的話很大程度避免反序列化失敗。但是如果類發生了非常規性改變,比如修改了類名,修改了成員變量的類型,盡快serialVersionUID驗證通過,反序列化還是會失敗,再者就是靜態成員變量和transient關鍵字標記的成員變量不參與序列化過程。