對象的序列化與反序列化_第1頁
對象的序列化與反序列化_第2頁
對象的序列化與反序列化_第3頁
對象的序列化與反序列化_第4頁
對象的序列化與反序列化_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

關(guān)于對象的序列化與反序列化本章內(nèi)容對象序列化與反序列化的基本概念實現(xiàn)序列化的基本過程

Serializable和Externalizable接口

ObjectOutputStream和ObjectInputStream自定義序列化的兩種方式默認序列化方式與自定義序列化方式的比較類不同版本的序列化兼容性第2頁,共17頁,2024年2月25日,星期天對象序列化對象序列化:將Java對象轉(zhuǎn)化成二進制字節(jié)流的過程。對象反序列化:

將二進制字節(jié)流恢復為Java對象的過程。對象序列化的主要用途:將對象的字節(jié)序列永久的保存到硬盤上,通常存放在一個文件中。(2)在網(wǎng)絡(luò)中跨虛擬機傳遞對象。第3頁,共17頁,2024年2月25日,星期天Serializable和Externalizable接口序列化的過程:只有實現(xiàn)了Serializable和Externalizable接口的類的對象才能進行序列化操作。

Externalizable接口繼承自Serializable口,實現(xiàn)Externalizable接口的類需要自行控制序列化的行為。實現(xiàn)Serializable接口的類采用默認的序列化方式。

JDK類庫中的部分類(String,封裝類和Date類等)都實現(xiàn)了Serializable接口。第4頁,共17頁,2024年2月25日,星期天ObjectInputStream和ObjectOutputStream(2)對象輸入和輸出流構(gòu)造方法:ObjectInputStream(InputStreamin)ObjectOutputStream(OutputStreamout)

見源文件:ObjectSerTest.java第5頁,共17頁,2024年2月25日,星期天ObjectInputStreamObjectInputStream按照默認方式進行反序列化時,具有以下特點:(1)如果內(nèi)存中對象所屬的類還沒有加載,那么會加載并初始化這個類。如果在classpath中找不到相應(yīng)的類文件,拋出ClassNotFoundException。(2)在反序列化時不會調(diào)用類的任何構(gòu)造方法。第6頁,共17頁,2024年2月25日,星期天對象序列化注意的問題:

(1)序列化和反序列化的順序要一致

(2)保存對象的文件名一般不要用.txt文件,換成.obj或.ser文件最好第7頁,共17頁,2024年2月25日,星期天對象序列化ObjectOutputStream只能對實現(xiàn)了Serializable接口的類的對象進行默認的序列化操作,這種操作僅僅為對象的非transient和非static的實例屬性進行序列化。

見源文件:非transient/ObjectSerTest1.java

注意:靜態(tài)屬性屬于類,不屬于對象。靜態(tài)屬性在類加載的時候初始化,將含有靜態(tài)屬性的對象的序列化和反序列化分開在不同的進程中,以得到正確結(jié)果。

見源文件:非transient/WriteStudent.java

非transient/ReadStudent.java

第8頁,共17頁,2024年2月25日,星期天transient成員屬性transient屬性不能被序列化,那么可以修飾以下類型的屬性。(1)實例屬性不代表對象的固有的內(nèi)部數(shù)據(jù),僅僅代表具有一定邏輯含義的臨時數(shù)據(jù)。

………..privateStringfirstName;privateStringlastName;

privatetransientStringfullName;(2)實例屬性表示一些比較敏感的信息(密碼等),出于安全方面的原因不希望被序列化。(3)實例屬性需要按照用戶自定義的方式序列化,如經(jīng)過加密后再序列化。第9頁,共17頁,2024年2月25日,星期天具有關(guān)聯(lián)關(guān)系的對象之間的序列化ClassTeacherimplementsSerializable{…………

privateSet<Student>stu=newHashSet<Student>();}當序列化Teacher對象時,系統(tǒng)還會序列化Teacher所關(guān)聯(lián)的其他可序列化的對象(Student對象)。

ABCEDF第10頁,共17頁,2024年2月25日,星期天自定義序列化方式-Serializable接口自定義序列化方式,在可序列化類中定義下面兩個方法:privatevoidwriteObject(ObjectOutputStreamout)throwsIOExceptionprivatevoidreadObject(ObjectInputStreamin)throwsIOException,ClassNotFoundException

注意:上述兩個方法不是java.io.Serializable接口中定義的方法第11頁,共17頁,2024年2月25日,星期天自定義序列化方式-Serializable接口自定義序列化方式常用于以下情況:確保序列化的安全性,對敏感信息加密后再序列化,在反序列化時先解密。見源文件:ObjSerSecurity.java(2)確保對象的成員屬性符合正確的約束條件。見源文件:ObjSerConstraint.java(3)能夠優(yōu)化序列化的性能見源文件:性能優(yōu)化/ObjSerCapacity.java性能優(yōu)化/ObjSerOptimizeCapacity.java注意:需要按自定義方式序列化的成員屬性,是否定義為transient類型無關(guān)緊要。第12頁,共17頁,2024年2月25日,星期天自定義序列化方式-Externalizable接口Externalizable接口繼承自Serializable接口。如果一個類實現(xiàn)了Externalizable接口,那么將完全由這個類控制自身的序列化行為。publicvoidwriteExternal(ObjectOutputout)throwsIOExceptionpublicvoidreadExternal(ObjectInputin)throwsIOException,ClassNotFoundException

注意:對實現(xiàn)了Externalizable接口的類的對象進行反序列化操作時,會調(diào)用該類無參的構(gòu)造方法見源文件:ObjExternalSer.java第13頁,共17頁,2024年2月25日,星期天默認序列化與自定義序列化的比較默認序列化方式的不足對象當中的不易對外公開的敏感數(shù)據(jù)進行序列化,安全性低。(2)不會檢查對象的成員屬性是否合乎正確的約束條件。(3)默認的序列化方式需要對對象圖進行遞歸遍歷,如果對象圖很復雜,會消耗很多空間和時間,甚至引起Java虛擬機堆棧溢出。自定義序列化方式兩種:實現(xiàn)Serializable接口,并且提供private的writeObject()和readObject()。(2)實現(xiàn)Externalizable接口,實現(xiàn)writeExternal()和readExternal()方法,必須提供public無參的構(gòu)造方法。第14頁,共17頁,2024年2月25日,星期天可序列化類的不同版本的序列化兼容性

實現(xiàn)Serializable接口的類都有一個表示序列化版本標識符的靜態(tài)常量。

privatestaticfinallongserialVersionUID;JDK安裝目錄的bin目錄下有個serialver.exe用于查看serialVersionUID。

用法:serialver字節(jié)碼serialVersionUID依賴于內(nèi)部的實現(xiàn)細節(jié)與編譯器。第15頁,共17頁,2024年2月25日,星期天可序列化類的不同版本的序列化兼容性

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論