




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java序列化機(jī)制一、應(yīng)用場(chǎng)景二、Java泛型的概念三、Java對(duì)象實(shí)現(xiàn)序列化的步驟四、Java實(shí)現(xiàn)反序列化的步驟本學(xué)習(xí)情境主要內(nèi)容3一、應(yīng)用場(chǎng)景在分布式環(huán)境下,當(dāng)進(jìn)行遠(yuǎn)程通信時(shí),彼此可以發(fā)送各種類型的數(shù)據(jù)。無(wú)論是何種類型的數(shù)據(jù),都會(huì)以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳輸。發(fā)送方需要把這個(gè)Java對(duì)象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為Java對(duì)象。序列化常應(yīng)用于以下場(chǎng)景(1)永久性保存對(duì)象,保存對(duì)象的字節(jié)序列到本地文件或者數(shù)據(jù)庫(kù)中;(2)通過序列化以字節(jié)流的形式使對(duì)象在網(wǎng)絡(luò)中進(jìn)行傳遞和接收;(3)通過序列化在進(jìn)程間傳遞對(duì)象。二、Java序列化序列化的概念Java序列化是指把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過程,Java反序列化是指把字節(jié)序列恢復(fù)為Java對(duì)象的過程。Java序列化的幾種方式比較常見的做法有:采用Java對(duì)象的序列化和反序列化機(jī)制把對(duì)象包裝成JSON字符串傳輸采用Google的開源工具protoBuf。Java對(duì)象序列化機(jī)制Java對(duì)象的序列化和反序列化機(jī)制,是JavaJDK提供了一套API來(lái)支持Java對(duì)象序列化。其中包括序列化的接口和Input/Output流的相關(guān)類。本學(xué)習(xí)情境是采用Java對(duì)象序列化機(jī)制。java.io.Serializable接口java.io.Externalizable接口ObjectOutput接口ObjectInput接口ObjectOutputStream類ObjectInputStream類Serializable接口,表示一個(gè)類的可序列化性由實(shí)現(xiàn)Serializable接口的類啟用。未實(shí)現(xiàn)此接口的類的任何狀態(tài)都不會(huì)序列化或反序列化。序列化接口沒有方法或字段,僅用于標(biāo)識(shí)可序列化的語(yǔ)義。ObjectOutputStream類,代表對(duì)象輸出流,它的writeObject(Objectobj)方法可對(duì)參數(shù)指定的obj對(duì)象進(jìn)行序列化,把得到的字節(jié)序列寫到一個(gè)目標(biāo)輸出流中。ObjectInputStream類,代表對(duì)象輸入流,它的readObject()方法從一個(gè)源輸入流中讀取字節(jié)序列,再把它們反序列化為一個(gè)Java對(duì)象,并將其返回。定義一個(gè)類,并實(shí)現(xiàn)Serializable或Externalizable接口。實(shí)現(xiàn)Serializable接口只要讓Java類實(shí)現(xiàn)Serializable接口即可,無(wú)需實(shí)現(xiàn)任何方法。使用ObjectOutputStream的writeObject(Objectobj)方法和ObjectInputStream的readObject()方法,對(duì)序列化的Java對(duì)象進(jìn)行讀寫為字節(jié)輸出流和輸入流。Java提供對(duì)象序列化的方法三、Java對(duì)象實(shí)現(xiàn)序列化的步驟第一步,定義一個(gè)實(shí)體類,并實(shí)現(xiàn)Serializable接口publicclassEmployeeimplementsSerializable{}Employeeemployee=newEmployee();第二步,創(chuàng)建該類的對(duì)象Filefile=newFile(“物理文件”);第三步,創(chuàng)建邏輯文件第四步,創(chuàng)建文件輸出流FileOutputStreamfos=newFileOutputStream(file);第五步,創(chuàng)建對(duì)象輸出流,負(fù)責(zé)將對(duì)象寫入字節(jié)流ObjectOutputStreamoos=newObjectOutputStream(fos);第六步,通過對(duì)象輸出流寫入對(duì)象oos.writeObject(employee);第七步,關(guān)閉流oos.close();fos.close();四、Java實(shí)現(xiàn)反序列化的步驟第一步,定義一個(gè)實(shí)體類,并實(shí)現(xiàn)Serializable接口publicclassEmployeeimplementsSerializable{}Employeeemployee=newEmployee();使用無(wú)參的構(gòu)造函數(shù)創(chuàng)造一個(gè)實(shí)體類的對(duì)象第二步,創(chuàng)建該類的對(duì)象第三步,創(chuàng)建邏輯文件Filefile=newFile(“物理文件”);//構(gòu)造函數(shù)第四步,創(chuàng)建文件輸入流FileInputStreamfis=newFileInputStream(file);第五步,創(chuàng)建對(duì)象輸出流,負(fù)責(zé)將對(duì)象寫入字節(jié)流ObjectInputStreamiis=newObjectInputStream(fis);第六步,通過對(duì)象輸出流讀出對(duì)象并處理該對(duì)象employee=iis.readObject(employee);System.out.println(employee);第七步,關(guān)閉流iis.close();fis.close();小結(jié)Java序列化是指把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過程,而Java反序列化是指把字節(jié)序列恢復(fù)為Java對(duì)象的過程。常見的Java序列化方式有Java對(duì)象序列化機(jī)制和JSON字符串方式。Java對(duì)象序列化機(jī)制是使用Serializable接口。使用類ObjectInputStream和ObjectOutputStream的readObject()和writeObject()方法實(shí)現(xiàn)讀寫。Java序列化機(jī)制的使用實(shí)例一、任務(wù)描述二、任務(wù)分析、設(shè)計(jì)三、任務(wù)實(shí)施四、運(yùn)行結(jié)果本學(xué)習(xí)情境主要內(nèi)容27一、任務(wù)描述使用Java序列化機(jī)制編寫應(yīng)用程序任務(wù)需求將一個(gè)對(duì)象序列化后寫入到本地文件中然后反序列化后讀取顯示。二、任務(wù)分析、設(shè)計(jì)分析類Address類,該類描述員工的地址信息,實(shí)現(xiàn)Serializable接口。Employee類,該類描述員工的信息,實(shí)現(xiàn)Serializable接口,同時(shí)其引用了Address類,作為員工的地址。EmployeeSerializableTest類,序列化測(cè)試類。EmployeeDeserializedTest類,反序列化測(cè)試類。數(shù)據(jù)文件:D:\employee.dat其類圖如圖5-1所示。Employee類引用了Address類三、任務(wù)實(shí)施1序列化實(shí)體對(duì)象并寫入文件第一步,創(chuàng)建地址類AddresspublicclassAddress
implementsSerializable
{privatestaticfinallongserialVersionUID=4983187287403615604L;…}實(shí)現(xiàn)Serializable接口非常簡(jiǎn)單,只要讓Java類實(shí)現(xiàn)Serializable接口即可,無(wú)需實(shí)現(xiàn)任何方法。一個(gè)類一旦實(shí)現(xiàn)了Serializable接口,那么該類的對(duì)象就是可序列化的。第二步,創(chuàng)建員工類EmployeepublicclassEmployeeimplementsSerializable{privatestaticfinallongserialVersionUID=3049633059823371192L;privateStringname;//表示員工的姓名
privateintage;//表示員工的年齡
privateAddressaddress;//表示員工的地址…}Employee實(shí)現(xiàn)了Serializable接口,那么該類的對(duì)象就是可序列化的。該類引用了Address地址對(duì)象,地址類也是可序列化的。第三步創(chuàng)建測(cè)試類publicclassEmployeeSerializeTest{ publicstaticvoidmain(String[]args){ //創(chuàng)建一個(gè)員工對(duì)象
//將該對(duì)象寫入到文件中,序列化該對(duì)象
}}在main方法中編寫測(cè)試代碼第四步新建員工對(duì)象//創(chuàng)建address對(duì)象Addressaddress=newAddress("中國(guó)","吉林","長(zhǎng)春");//創(chuàng)建employee對(duì)象Employeeemployee=newEmployee("張XX",30,address);第五步,將對(duì)象序列化后寫入文件Filefile=newFile("D:\\employee.dat");FileOutputStream
fos=newFileOutputStream(file);ObjectOutputStream
oos=newObjectOutputStream(fos);oos.writeObject(employee);首先指定物理文件到邏輯文件Filefile=newFile("d:\\employee23.dat");然后創(chuàng)建文件輸出流到邏輯文件FileOutputStream
fos=newFileOutputStream(file);再創(chuàng)建對(duì)象輸出流到文件輸出流ObjectOutputStream
oos=newObjectOutputStream(fos);最后通過對(duì)象輸出流完成寫操作oos.writeObject(employee);oos.flush();oos.close();fos.close();第六步,關(guān)閉流2反序列化對(duì)象從磁盤上讀出反序列化將Employee對(duì)象從磁盤上讀出并修改員工信息,然后再寫入到文件中。反序列化需要使用的類是ObjectInputStream,反序列化步驟如下:創(chuàng)建ObjectInputStream對(duì)象;使用ObjectInputStream的readObject方法取出對(duì)象。首先,創(chuàng)建反序列化測(cè)試類publicstaticvoidmain(String[]args){//建立數(shù)據(jù)文件對(duì)象 Filefile=newFile("d:\\employee23.dat"); //從文件中讀取對(duì)象,反序列化該對(duì)象
//修改該員工的相關(guān)信息
//將該員工對(duì)象再次寫入文件中,進(jìn)行序列化
//再次從文件中讀取對(duì)象,進(jìn)行反序列化
}在main方法中編寫測(cè)試步驟第一步從文件中讀取對(duì)象,反序列化該對(duì)象FileInputStream
fis=newFileInputStream(file);ObjectInputStream
ois=newObjectInputStream(fis);employee1=(Employee)ois.readObject();System.out.println("修改前員工的信息:");System.out.println(employee1);//輸出employee對(duì)象首先創(chuàng)建文件輸入流fis到邏輯文件file然后創(chuàng)建對(duì)象輸入流ois到文件輸入流fis在通過對(duì)象輸入流ois讀出字節(jié)流到Java對(duì)象,最后輸出第二步,修改員工的相關(guān)信息//修改該員工的相關(guān)信息employee1.getAddress().setState("中國(guó)");employee1.getAddress().
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人財(cái)產(chǎn)安全設(shè)備銷售與租賃合同
- 外墻保溫裝飾一體板施工合同
- 學(xué)校專家聘用合同
- 關(guān)于提高工作效率的溝通機(jī)制研究報(bào)告
- 鄉(xiāng)村發(fā)展行動(dòng)指導(dǎo)書
- 制造業(yè)企業(yè)數(shù)字化轉(zhuǎn)型實(shí)施方案
- 核電安全施工方案模板
- 籃球場(chǎng)工程施工方案
- 河南電力電纜線槽施工方案
- 建筑工程切險(xiǎn)保險(xiǎn)合同
- 2024年P(guān)E防靜電氣泡袋項(xiàng)目可行性研究報(bào)告
- 2024年四川省瀘州市中考物理試題含答案
- 【蘇寧易購(gòu)建設(shè)財(cái)務(wù)共享服務(wù)中心的現(xiàn)存問題及優(yōu)化建議探析(論文)13000字】
- 《現(xiàn)代家政導(dǎo)論》電子教案 5.3模塊五項(xiàng)目三我國(guó)家政服務(wù)業(yè)發(fā)展認(rèn)知
- 化學(xué)實(shí)驗(yàn)室安全培訓(xùn)課件
- 廣告制作項(xiàng)目應(yīng)急服務(wù)方案
- 二十屆三中全會(huì)精神知識(shí)競(jìng)賽試題及答案
- 施工現(xiàn)場(chǎng)復(fù)工安全教育內(nèi)容
- DB34∕T 2291-2015 小型水利工程施工質(zhì)量檢驗(yàn)與評(píng)定規(guī)程
- 儲(chǔ)能解決方案
- 統(tǒng)編版六年級(jí)下冊(cè)道德與法治1-學(xué)會(huì)尊重-課件(54張課件)
評(píng)論
0/150
提交評(píng)論