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

下載本文檔

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

文檔簡介

主題:Java對象的序列化-Java核心技術(shù)-目標(biāo)序列化的概念對象流對象序列化和反序列化的實現(xiàn)機制什么是序列化創(chuàng)建一個對象,對其序列化(分解成字節(jié)流

)。網(wǎng)絡(luò)傳輸準(zhǔn)確無誤地重新“裝配”,即打開字節(jié)流并重構(gòu)對象。序列化的概念對象流是將對象的內(nèi)容進(jìn)行流化。序列化就是一種用來處理對象流的機制。對象序列化(serialize)是把對象轉(zhuǎn)換成字節(jié)序列的過程。將字節(jié)序列完全恢復(fù)為原來的對象的過程,稱為對象的反序列化(deserialize)。

復(fù)制對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列。

“持久性”意味著一個對象的生命周期并不取決于程序是否正在執(zhí)行,對象可以生存于程序的調(diào)用之間。通過將一個序列化對象寫入磁盤,然后在重新調(diào)用程序時恢復(fù)該對象,就能夠?qū)崿F(xiàn)持久性的效果。

例如:從服務(wù)器硬盤上把序列化的對象取出,然后通過網(wǎng)絡(luò)傳到客戶端,再由客戶端把序列化的對象讀入內(nèi)存,執(zhí)行相應(yīng)的處理。序列化的作用對象序列化可以實現(xiàn)分布式對象。利用序列化可以將對象傳輸于網(wǎng)絡(luò)。利用序列化可以實現(xiàn)對象的“持久性”。利用對象序列化可以進(jìn)行對象的“深復(fù)制”。RMI(遠(yuǎn)程方法調(diào)用)要利用對象序列化運行遠(yuǎn)程主機上的服務(wù),就像在本地機上運行對象時一樣。Java中的序列化機制Java中一個類只要實現(xiàn)了Serializable接口,它的對象就可以被序列化工具存儲和恢復(fù)。Serializable接口沒有定義任何方法,它只是用來表示一個類的實例──對象可以被序列化。對象流java.io包有兩個序列化對象的類:

ObjectOutputStream負(fù)責(zé)將對象寫入字節(jié)流

ObjectInputStream從字節(jié)流重構(gòu)對象。序列化對象示例

示例:將一個Date類的實例保存到文件中。publicstaticvoidwriteDateToFile(Datedate,StringfileName) { try { FileOutputStreamfileOut= newFileOutputStream(fileName,false); ObjectOutputStreamobjectOut= newObjectOutputStream(fileOut); objectOut.writeObject(date); objectOut.close();//關(guān)閉對象流

fileOut.close();//關(guān)閉文件流

} catch(IOExceptionioe) {……} }創(chuàng)建一個對象輸出流。寫Date對象。

分析:只能對流化后的對象進(jìn)行讀寫操作。所以要先對Date類的實例進(jìn)行序列化操作。創(chuàng)建一個文件輸出流。序列化序列化一個對象的一般過程:步驟一:首先要創(chuàng)建某些OutputStream對象,然后以該對象為參數(shù)構(gòu)造一個ObjectOutputStream對象。步驟二:調(diào)用ObjectOutputStream類的writeObject()方法即可將對象序列化,并將其發(fā)送給OutputStream。

FileOutputStreamfileOut= newFileOutputStream(fileName,false);ObjectOutputStreamobjectOut= newObjectOutputStream(fileOut);objectOut.writeObject(date);//date是Date類的對象分析:只能對流化后的對象進(jìn)行讀寫操作。所以要先對Date類的實例進(jìn)行反序列化操作。publicstaticDatereadDateFromFile(StringfileName) {Datedate=null; try {FileInputStreamfileIn= newFileInputStream(fileName); ObjectInputStreamobjectIn= newObjectInputStream(fileIn); Objectobj=objectIn.readObject(); if(objinstanceofDate){date=(Date)obj;} else {System.err.println("從文件中讀出的對象不是Date類的實例。");……} objectIn.close();//關(guān)閉對象流

fileIn.close();//關(guān)閉文件流} catch(ClassNotFoundExceptioncnfe){……} returndate;}反序列化對象示例

示例:從文件中將Date實例恢復(fù)。創(chuàng)建一個對象輸入流。讀Date對象。

創(chuàng)建一個文件輸入流。反序列化反序列化一個對象的一般過程:步驟一:將一個InputStream封裝在ObjectInputStream內(nèi)。步驟二:調(diào)用ObjectInputStream的readObject()方法從字節(jié)流中反序列化對象。FileInputStreamfileIn= newFileInputStream(fileName);ObjectInputStreamobjectIn= newObjectInputStream(fileIn);Objectobj=objectIn.readObject();

//date是Date類的對象小結(jié)對象序列化是把對象轉(zhuǎn)換成一個字節(jié)序列的過程。將字節(jié)序列并完全恢復(fù)為原來的對象的過程,稱為對象的反序列化。java.io包有兩個序列化對象的類:ObjectOutputStream類

ObjectOutputStream類的writeObject()方法用于對象的序列化ObjectInputStream類

ObjectInputStream類的readObject()方法

溫馨提示

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

評論

0/150

提交評論