Android中Serializable和Parcelable的用法及區(qū)別

Android中Serializable和Parcelable的用法及區(qū)別

第一點(diǎn)薄啥,解釋什么是序列化茵典。

序列化 (Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程。

在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到Ram 或者是rom,也就是臨時(shí)或持久性存儲(chǔ)區(qū)。

以后投蝉,可以通過(guò)從存儲(chǔ)區(qū)中讀取對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象征堪,這個(gè)就是反序列化瘩缆。

Android中用到的序列化有兩種方法,第一種是Serializable佃蚜,第二種是Parcelable庸娱。

Serializable

Serializable 是可串行化,也就是序列化的意思谐算。Serializable 是java序列化的一種方式熟尉,在java里面也是一個(gè)接口。源碼里面這個(gè)接口里啥也沒(méi)有洲脂,如果一個(gè)接口里面什么內(nèi)容都沒(méi)有斤儿,那么這個(gè)接口是一個(gè)標(biāo)識(shí)接口就相當(dāng)于告訴JVM,需要你幫我序列化這個(gè)類恐锦。

怎么去實(shí)現(xiàn)它呢往果?就把我們要序列化的類繼承這個(gè)接口就行了,最好再指定一個(gè)
serialVersionUid
這個(gè)serialVersionUID是用來(lái)輔助對(duì)象的序列化與反序列化的一铅,原則上序列化后的數(shù)據(jù)當(dāng)中的serialVersionUID與當(dāng)前類當(dāng)中的serialVersionUID一致陕贮,那么該對(duì)象才能被反序列化成功。這個(gè)serialVersionUID的詳細(xì)的工作機(jī)制是:在序列化的時(shí)候系統(tǒng)將serialVersionUID寫入到序列化的文件中去潘飘,當(dāng)反序列化的時(shí)候系統(tǒng)會(huì)先去檢測(cè)文件中的serialVersionUID是否跟當(dāng)前的文件的serialVersionUID是否一致肮之,如果一直則反序列化成功,否則就說(shuō)明當(dāng)前類跟序列化后的類發(fā)生了變化卜录,比如是成員變量的數(shù)量或者是類型發(fā)生了變化局骤,那么在反序列化時(shí)就會(huì)發(fā)生crash,并且回報(bào)出錯(cuò)誤
也可以不指定~不指定就會(huì)隨機(jī)分配一個(gè)暴凑。

兩者最大的區(qū)別在于存儲(chǔ)媒介的不同,Serializable使用IO讀寫存儲(chǔ)在硬盤上赘来,而Parcelable是直接在內(nèi)存中讀寫现喳,很明顯內(nèi)存的讀寫速度通常大于IO讀寫凯傲,所以在Android中通常優(yōu)先選擇Parcelable。
Serializable 使用硬盤存儲(chǔ)的性質(zhì)也就注定了它一般用于異地網(wǎng)絡(luò)傳輸嗦篱。
序列化過(guò)程使用了反射技術(shù)冰单,并且期間產(chǎn)生臨時(shí)對(duì)象。優(yōu)點(diǎn)代碼少灸促。是利用反射創(chuàng)建了一個(gè)對(duì)象诫欠,調(diào)用該類的第一個(gè)非Serializable類型的父類的無(wú)參構(gòu)造方法。所以這就是為什么通過(guò)反序列化創(chuàng)建對(duì)象的時(shí)候浴栽,并不會(huì)執(zhí)行被序列化對(duì)象的構(gòu)造方法荒叼。對(duì)于實(shí)現(xiàn)Serializable接口的類,并不要求該類具有一個(gè)無(wú)參的構(gòu)造方法, 因?yàn)樵诜葱蛄谢倪^(guò)程中實(shí)際上是去其繼承樹上找到一個(gè)沒(méi)有實(shí)現(xiàn)Serializable接口的父類(最終會(huì)找到Object)典鸡,然后構(gòu)造該類的對(duì)象被廓,再逐層往下的去設(shè)置各個(gè)可以反序列化的屬性(也就是沒(méi)有被transient修飾的非靜態(tài)屬性)。

Parcel

簡(jiǎn)單來(lái)說(shuō)萝玷,Parcel提供了一套機(jī)制嫁乘,可以將序列化之后的數(shù)據(jù)寫入到一個(gè)共享內(nèi)存中,其他進(jìn)程通過(guò)Parcel可以從這塊共享內(nèi)存中讀出字節(jié)流球碉,并反序列化成對(duì)象蜓斧。

實(shí)現(xiàn)方法:繼承Parcelable,重寫3個(gè)方法睁冬,一個(gè)靜態(tài)對(duì)象

構(gòu)造方法-根據(jù)parcel 構(gòu)造出一個(gè)對(duì)象

重寫3個(gè)方法
createFromParcel(Parcel parcel)
writeToParcel(Parcel parcel)
newArray(int size)
靜態(tài)內(nèi)部類 CREATOR挎春,用于反序列化調(diào)構(gòu)造出對(duì)象

本質(zhì)上就是把對(duì)象的基本數(shù)據(jù)按照開發(fā)者定義的順序?qū)懭胍粋€(gè)parcel 中,接收端再按照這個(gè)順序讀取出來(lái)痴突,組合成一個(gè)對(duì)象~

優(yōu)點(diǎn):內(nèi)存中實(shí)現(xiàn)搂蜓,快!A勺啊帮碰!不會(huì)有大量臨時(shí)變量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拾积,隨后出現(xiàn)的幾起案子殉挽,更是在濱河造成了極大的恐慌,老刑警劉巖拓巧,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斯碌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肛度,警方通過(guò)查閱死者的電腦和手機(jī)傻唾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冠骄,你說(shuō)我怎么就攤上這事伪煤。” “怎么了凛辣?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵抱既,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扁誓,道長(zhǎng)防泵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任蝗敢,我火速辦了婚禮捷泞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘前普。我一直安慰自己肚邢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布拭卿。 她就那樣靜靜地躺著骡湖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峻厚。 梳的紋絲不亂的頭發(fā)上响蕴,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音惠桃,去河邊找鬼浦夷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辜王,可吹牛的內(nèi)容都是我干的劈狐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼呐馆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肥缔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起汹来,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤续膳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后收班,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坟岔,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年摔桦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了社付。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瘦穆,靈堂內(nèi)的尸體忽然破棺而出纪隙,到底是詐尸還是另有隱情,我是刑警寧澤扛或,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站碘饼,受9級(jí)特大地震影響熙兔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜艾恼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一住涉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钠绍,春花似錦舆声、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至磷脯,卻和暖如春蛾找,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赵誓。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工打毛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俩功。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓幻枉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诡蜓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熬甫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360