一人一猫旅行记之浅析序列化及原理
在Activity跳轉(zhuǎn)的時(shí)候,往往需要傳遞一個(gè)對象。不像String等基本類型,可以直接通過Intent的putExtra方法將數(shù)據(jù)加到Bundle中,換句話說對象并不是計(jì)算機(jī)可以識別的類型。
這樣的話就涉及到了一個(gè)概念,序列化。
什么是序列化呢?序列化就是將對象轉(zhuǎn)成可以存儲或者傳遞的形式的過程,反序列化也是一個(gè)相反的過程,也就是將序列化后的數(shù)據(jù)轉(zhuǎn)換成對象的一個(gè)過程。
Java與安卓分別提供了一種序列化的方法(Serializable和Parcelable)
那么二有什么區(qū)別呢?
1,Serializable會涉及到反射,產(chǎn)生大量的臨時(shí)變量,這會引起系統(tǒng)頻繁的GC
2,Serializable由JDK完成轉(zhuǎn)換,而Parcelable則是自己完成序列化和反序列化,這就導(dǎo)致前者的效率要遠(yuǎn)低于后者。安卓之所以設(shè)計(jì)Parcelable的初衷就是Serializable效率過慢,為了在組件之間或者不同APP之間提高數(shù)據(jù)的傳輸速度,才設(shè)計(jì)了Parcelable。
3,如果當(dāng)數(shù)據(jù)要存儲在磁盤而不是內(nèi)存中,Parcelable無法保證在外部環(huán)境發(fā)生變化時(shí)的連續(xù)性。
因此,在Android的組件或者APP之間傳遞數(shù)據(jù),選擇Parcelable。如果想要保存數(shù)據(jù)或者在網(wǎng)絡(luò)上傳輸則選擇Serializable。
二者在使用上也有很大的區(qū)別:
首先,對于Serializable來說使用非常簡單,只需要讓對象實(shí)現(xiàn)Serializable接口即可
我們可以看到Serializable這個(gè)接口是一個(gè)空的接口,這是怎么回事呢?
其實(shí)Serializable只是增加一個(gè)標(biāo)識,在寫入或者讀取的時(shí)候會根據(jù)這個(gè)標(biāo)識進(jìn)行對應(yīng)的處理,我們看到上面的注釋涉及到幾個(gè)類,咱們就看一下ObjectOutputStream中的源碼。
從上面的代碼應(yīng)該可以明白,如果一個(gè)類加了Serializable標(biāo)識,則會調(diào)用writeOrdinaryObject(obj, desc, unshared);
如果繼續(xù)往下閱讀代碼的話,會走到如下的方法中:
看到這相信就知道為什么Serializable的效率會低了吧?
然后,對于Parcelable來說,它的使用相對比較復(fù)雜,因?yàn)樗枰覀兪謩訉?shí)現(xiàn)序列化與反序列化的方法。
我們創(chuàng)建一個(gè)Person.java,實(shí)現(xiàn)Parcelable,會提示增加兩個(gè)方法和Parcelable的實(shí)現(xiàn),其實(shí)分別對應(yīng)Parcelable的三個(gè)過程(描述、序列化、反序列化)
上面是要實(shí)現(xiàn)的兩個(gè)方法,describeContents一般不需要處理,如果有一些需要特殊處理的數(shù)據(jù)的話則返回1。writeToParcel則是序列化的過程。
public static final Creator<Person> CREATOR = new Creator<Person>() {@Overridepublic Person createFromParcel(Parcel in) {return new Person(in);}@Overridepublic Person[] newArray(int size) {return new Person[size];}};createFromParcel中返回一個(gè)Person對象,也就是反序列化的實(shí)現(xiàn)。
在前面咱們提到了序列化跟反序列化只是一個(gè)過程,所以無論Serializable還是Parcelable只是一種實(shí)現(xiàn)方式,我們還可以通過很多其他的方式來實(shí)現(xiàn),比如JSON、XML,甚至用字符串也可以實(shí)現(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的一人一猫旅行记之浅析序列化及原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界银行为孟加拉国建设数据中心提供贷款
- 下一篇: 课堂经验值管理小程序_小程序刷新课堂评价