對(duì)象的序列化與反序列化

對(duì)象的序列化與反序列化

ID:41282907

大?。?26.51 KB

頁數(shù):41頁

時(shí)間:2019-08-21

對(duì)象的序列化與反序列化_第1頁
對(duì)象的序列化與反序列化_第2頁
對(duì)象的序列化與反序列化_第3頁
對(duì)象的序列化與反序列化_第4頁
對(duì)象的序列化與反序列化_第5頁
資源描述:

《對(duì)象的序列化與反序列化》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、對(duì)象的序列化與反序列化主要內(nèi)容概述當(dāng)兩個(gè)進(jìn)程進(jìn)行遠(yuǎn)程通信時(shí),彼此可以發(fā)送各種類型的數(shù)據(jù),包括文本圖片音頻視頻等,都會(huì)以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送.當(dāng)兩個(gè)java進(jìn)程進(jìn)行通信時(shí),一個(gè)進(jìn)程能否把一個(gè)java對(duì)象發(fā)送給另一個(gè)進(jìn)程呢?答案是肯定的!概述如何才能做到呢1)發(fā)送方需要把這個(gè)java對(duì)象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)上傳送2)接收方需要把字節(jié)序列再恢復(fù)為java對(duì)象.把java對(duì)象轉(zhuǎn)換為字節(jié)序列的過程稱為對(duì)象的序列化,.把字節(jié)序列恢復(fù)為java對(duì)象的過程稱為對(duì)象的反序列化.序列化與反序列化對(duì)象序列化兩種用途把對(duì)象的字節(jié)序列永久的保存到硬盤上,通常存放在一個(gè)文

2、件中.在網(wǎng)絡(luò)上傳送對(duì)象的字節(jié)序列.主機(jī)1主機(jī)2文件網(wǎng)絡(luò)傳輸存儲(chǔ)到文件9.1.jdk類庫(kù)中的序列化API如何才能做到呢1)發(fā)送方需要把這個(gè)java對(duì)象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)上傳送2)接收方需要把字節(jié)序列再恢復(fù)為java對(duì)象.把java對(duì)象轉(zhuǎn)換為字節(jié)序列的過程稱為對(duì)象的序列化,.把字節(jié)序列恢復(fù)為java對(duì)象的過程稱為對(duì)象的反序列化.序列化與反序列化9.1jdk類庫(kù)中的序列化APIjava.io.ObjectOutputStream:代表對(duì)象輸出流它的writeObject(Objectobj)方法可對(duì)參數(shù)指定的obj對(duì)象進(jìn)行序列化,把得到的字節(jié)序列寫到一個(gè)目標(biāo)輸出

3、流中。Java.io.ObjectInputStream代表對(duì)象輸入流,它的readObject()方法從一個(gè)源輸入流中讀取字節(jié),再把它們反序列化成一個(gè)對(duì)象,并將其返回。9.1jdk類庫(kù)中的序列化API哪些類可以被序列化呢?只有實(shí)現(xiàn)了Serializable或Externalizable接口的類的對(duì)象才能被序列化,否則ObjectOutputStream的writeObject(Objectobj)方法會(huì)拋出IOException。實(shí)現(xiàn)了Serializable或Externalizable接口的類也稱為可序列化類。Externalizable接口繼承Seria

4、lizable接口,實(shí)現(xiàn)Externalizable接口的類完全由自身來控制序列化的行為。而僅實(shí)現(xiàn)Serializable接口的類可以采用默認(rèn)的序列化方式。Jdk的部分類如StringDate等都實(shí)現(xiàn)了Serializable接口9.1jdk類庫(kù)中的序列化API假定一個(gè)Customer類,它的對(duì)象需要序列化。可以有以下三種方式進(jìn)行如果customer類僅僅實(shí)現(xiàn)了Serializable接口的類,那么會(huì)按照以下方式進(jìn)行序列化和反序列化:ObjectOutputStream采用默認(rèn)的序列化方式,對(duì)Customer對(duì)象的非transient的實(shí)例變量進(jìn)行序列化。Ob

5、jectInputStream采用默認(rèn)的反序列化方式,對(duì)customer對(duì)象的非transient的實(shí)例變量進(jìn)行反序列化。9.1jdk類庫(kù)中的序列化API2.如果customer類僅僅實(shí)現(xiàn)了Serializable接口,并且還定義了readObject(ObjectInputStreamin)和writeObject(ObjectOutputStreamout),那么會(huì)按照以下方式進(jìn)行序列化和反序列化:ObjectOutputStream會(huì)調(diào)用Customer對(duì)象的writeObject(ObjectOutputStreamout)方法進(jìn)行序列化。ObjectI

6、nputStream會(huì)調(diào)用Customer對(duì)象的readObject(ObjectInputStreamin)方法進(jìn)行反序列化。9.1jdk類庫(kù)中的序列化API3.如果customer類實(shí)現(xiàn)了Externalizable接口,那么Customer類必須實(shí)現(xiàn)readExternal(ObjectInputin)和writeExternal(ObjectOutputout)方法,那么會(huì)按照以下方式進(jìn)行序列化和反序列化:ObjectOutputStream會(huì)調(diào)用Customer對(duì)象的writeExternal(ObjectOutputout)方法進(jìn)行序列化。Objec

7、tInputStream會(huì)調(diào)用Customer對(duì)象的readExternal(ObjectInputin)方法進(jìn)行反序列化。9.1jdk類庫(kù)中的序列化API類框圖9.1jdk類庫(kù)中的序列化步驟創(chuàng)建一個(gè)對(duì)象輸出流,它可以包裝一個(gè)其他類型的目標(biāo)輸出流,如文件輸出流:ObjectOutputStreamout=newObjectOutputStream(newfileOutputStream(“D:\objectfile.obj”));9.1jdk類庫(kù)中的序列化步驟通過對(duì)象輸出流的writeObject()方法寫對(duì)象,如:Out.writeObject(“hello

8、”);Out.write

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。