1杉适、作用
Serializable的作用是為了保存對象的屬性到本地文件、數(shù)據(jù)庫鸟辅、網(wǎng)絡(luò)流氛什、rmi以方便數(shù)據(jù)傳輸,當然這種傳輸可以是程序內(nèi)的也可以是兩個程序間的匪凉。而Android的Parcelable的設(shè)計初衷是因為Serializable效率過慢枪眉,為了在程序內(nèi)不同組件間以及不同Android程序間(AIDL)高效的傳輸數(shù)據(jù)而設(shè)計,這些數(shù)據(jù)僅在內(nèi)存中存在再层,Parcelable是通過IBinder通信的消息的載體贸铜。
從上面的設(shè)計上我們就可以看出優(yōu)劣了堡纬。
2、效率及選擇
Parcelable的性能比Serializable好萨脑,在內(nèi)存開銷方面較小隐轩,所以在內(nèi)存間數(shù)據(jù)傳輸時推薦使用Parcelable,如activity間傳輸數(shù)據(jù)渤早,而Serializable可將數(shù)據(jù)持久化方便保存职车,所以在需要保存或網(wǎng)絡(luò)傳輸數(shù)據(jù)時選擇Serializable,因為android不同版本Parcelable可能不同鹊杖,所以不推薦使用Parcelable進行數(shù)據(jù)持久化
3悴灵、區(qū)別
基本上就是Parcelable是內(nèi)存序列化,快速骂蓖,但是持久化麻煩(不建議)积瞒,Serializable屬于I/O級別序列化和反序列化,可以持久化保存登下。
4茫孔、Serializable中serialVersionUID
serialVersionUID默認的話如果刪除或修改了成員變量,會導(dǎo)致當前類hash值賦值給serialVersionUID和以前hash不一樣導(dǎo)致反序列化失敗被芳。指定的話很大程度避免反序列化失敗缰贝。但是如果類發(fā)生了非常規(guī)性改變,比如修改了類名畔濒,修改了成員變量的類型剩晴,盡快serialVersionUID驗證通過,反序列化還是會失敗侵状,再者就是靜態(tài)成員變量和transient關(guān)鍵字標記的成員變量不參與序列化過程赞弥。