序列化:將數(shù)據(jù)結(jié)構(gòu)或?qū)ο筠D(zhuǎn)換成二進(jìn)制串的過程。
反序列化:將在序列化過程中所生成的二進(jìn)制串轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)或者對(duì)象的過程。
Parcelable 與 Serializeable 的區(qū)別
Serializable | Parcelable |
---|---|
通過IO對(duì)硬盤操作,速度較慢 | 直接在內(nèi)存操作,效率高,性能好 |
大小不受限制 | 一般不能超過1M,修改內(nèi)核也只能4M |
大量使用反射,產(chǎn)生內(nèi)存碎片 |
有關(guān)序列化的幾個(gè)問題
什么是serialVersionUID?如果你不定義這個(gè),會(huì)發(fā)生什么?
假如你有一個(gè)類,它序列化并存儲(chǔ)在持久性中,然后修改了該類以添加新字段,如果對(duì)已序列化的對(duì)象進(jìn)行反序列化,會(huì)發(fā)生什么情況?
答:serialVersionUID是一個(gè)private static final long類型的ID,當(dāng)它被印在對(duì)象上,它通常是對(duì)象的哈希碼,你可以使用serialver這個(gè)JDK工具來查看序列化對(duì)象的serialVersionUID。不指定serialVersionUID的后果是,當(dāng)你添加或修改類中的任何字段時(shí),則已序列化類將無法恢復(fù),因?yàn)闉樾骂惡团f序列化對(duì)象生產(chǎn)的serialVersionUID將有所不同。Java序列化過程依賴于正確的序列化對(duì)象恢復(fù)狀態(tài)的,并在序列化對(duì)象序列版本不匹配的情況下引發(fā)java.io.InvalidClassException無效類異常。
序列化時(shí),你希望某些成員不要序列化?你如何實(shí)現(xiàn)它?
答:有時(shí)候也會(huì)變著形式問,比如問什么是瞬態(tài)trasient變量,瞬態(tài)和靜態(tài)變量會(huì)不會(huì)得到序列化等,所以,如果你不希望任何字段是對(duì)象的狀態(tài)的一部分,然后聲明它靜態(tài)或瞬態(tài)根據(jù)你的需要,這樣就不會(huì)是Java序列化過程中被包含在內(nèi)
如果一個(gè)類中的一個(gè)成員為實(shí)現(xiàn)可序列化接口,會(huì)發(fā)生什么情況?
答:如果嘗試序列化實(shí)現(xiàn)可序列化的類的對(duì)象,但該對(duì)象包含對(duì)不可序列化類的引用,則在運(yùn)行時(shí)將引發(fā)不可序列化異常NotSerializableException
如果類是可序列化的,但其超類不是,則反序列化后從超級(jí)類繼承的實(shí)例變量的狀態(tài)如何?
答:Java序列化過程僅在對(duì)象層次都是可序列化結(jié)構(gòu)中繼續(xù),即實(shí)現(xiàn)Java中可序列化接口,并且從超級(jí)類繼承的實(shí)例變量的值將通過調(diào)用構(gòu)造函數(shù)初始化,在反序列化過程中不可序列化的超級(jí)類
是否可以自定義序列化過程,或者是否可以覆蓋Java中的默認(rèn)序列化過程?
假設(shè)新類的超級(jí)類實(shí)現(xiàn)可序列化接口,如何避免新類被序列化?
答:對(duì)于序列化一個(gè)對(duì)象需調(diào)用ObjectOutputStream.writeObject(saveThisObject),并用ObjectInputStream.readObject()讀取對(duì)象,但Java虛擬機(jī)為你提供的還有一件事,是定義這個(gè)兩個(gè)方法。如果在類中定義這兩個(gè)方法,則JVM將調(diào)用這兩個(gè)方法,而不是應(yīng)用默認(rèn)序列化機(jī)制。你可以在此處通過執(zhí)行任何類型的預(yù)處理或后處理任何來自定義對(duì)象序列化和反序列化的行為。
在Java中的序列化和反序列化過程中使用哪些方法?
答:考察你是否熟悉readObject()的用法、writeObject()、readExternal()和writeExternal()。Java序列化由java.io.ObjectOutputStream類完成。該類是一個(gè)篩選器流,它封裝在較低級(jí)別的字節(jié)流中,以處理序列化機(jī)制。要通過序列化機(jī)制存儲(chǔ)任何對(duì)象,我們調(diào)用ObjectOutputStream.writeObject(savethisobject),并反序列化該對(duì)象,我們稱之為ObjectInputStream.readObject()方法。調(diào)用以writeObject()方法在java中觸發(fā)序列化過程。關(guān)于readObject()方法,需要注意的一點(diǎn)很重要一點(diǎn)是,它用于從持久性讀取字節(jié),并從這些字節(jié)創(chuàng)建對(duì)象,并返回一個(gè)對(duì)象,該對(duì)象需要類型強(qiáng)制轉(zhuǎn)換為正確的類型。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站題目:序列化--Serial-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://www.rwnh.cn/article8/dpesop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、商城網(wǎng)站、虛擬主機(jī)、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容