Linux高級(jí)編程實(shí)驗(yàn)實(shí)驗(yàn)2報(bào)告_第1頁(yè)
Linux高級(jí)編程實(shí)驗(yàn)實(shí)驗(yàn)2報(bào)告_第2頁(yè)
Linux高級(jí)編程實(shí)驗(yàn)實(shí)驗(yàn)2報(bào)告_第3頁(yè)
Linux高級(jí)編程實(shí)驗(yàn)實(shí)驗(yàn)2報(bào)告_第4頁(yè)
Linux高級(jí)編程實(shí)驗(yàn)實(shí)驗(yàn)2報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師:李林實(shí)驗(yàn)地點(diǎn):清水河主樓A2-412 實(shí)驗(yàn)時(shí)間:2016.11.16一、實(shí)驗(yàn)室名稱:Linux環(huán)境高級(jí)編程實(shí)驗(yàn)室二、實(shí)驗(yàn)項(xiàng)目名稱:對(duì)象序列化實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí):8學(xué)時(shí)四、實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)序列化原理與方法,掌握基本的序列化技巧五、實(shí)驗(yàn)內(nèi)容:l 版本1:將一個(gè)類的一個(gè)對(duì)象序列化到文件l 版本2:將一個(gè)類的多個(gè)對(duì)象序列化到文件l 版本3:將兩個(gè)類的多個(gè)對(duì)象序列化到文件l 版本4:按照面向?qū)ο蟮姆椒?,解決多個(gè)類的多個(gè)對(duì)象序列化到文件的問題l 版本5:序列化的目的地不僅可以是文件,還可以是其他,即可配置性六、實(shí)驗(yàn)步

2、驟:1、版本一程序分析:源程序如下,功能是將一個(gè)類的一個(gè)對(duì)象(電話號(hào)碼)序列化到文件:#include <fcntl.h>#include <iostream>#include <vector>#include<string.h>class SAD /Serialize And Deserializepublic: SAD() / 構(gòu)造函數(shù)。 tel0 = tel1 = 0; /將電話號(hào)碼分成兩個(gè)int變量保存。 explicit SAD( long int m,long int k) tel0 = m;tel1=k; virtual SAD()

3、/*使用虛析構(gòu)。在析構(gòu)時(shí)防止只析構(gòu)基類而不析構(gòu)派生類的狀況發(fā)生,造成內(nèi)存泄漏。*/ public: void reshow () /用于打印出變量的值。 std:cout << " TEL of recovery: " << tel0 <<tel1<< std:endl; public: void show () /用于打印出電話的值。 std:cout << " TEL before Serialize: " << tel0 <<tel1<< std:end

4、l; public: bool xuliehua(const char *lujing) const/*非靜態(tài)成員函數(shù)后面加了const的成員函數(shù)可以被非const對(duì)象和const對(duì)象調(diào)用。*/ int fd = :open(lujing, O_RDWR | O_CREAT | O_TRUNC, 0);/*open函數(shù)位于fcntl.h中。open 函數(shù)用于打開和創(chuàng)建文件。pFilePath表示文件名,參數(shù)O_RDWR表示以可讀寫方式打開文件.O_CREAT表示若欲打開的文件不存在則自動(dòng)建立該文件.O_TRUNC表示若文件存在并且以可寫的方式打開時(shí),此旗標(biāo)會(huì)令文件長(zhǎng)度清為0,而原來存于該文件的

5、資料也會(huì)消失.若所有欲核查的權(quán)限都通過了檢查則返回0值,表示成功,只要有一個(gè)權(quán)限被禁止則返回-1.*/if(-1 = fd) return false;if(:write(fd, &tel0, sizeof(long int) && (:write(fd, &tel1, sizeof(long int) = -1)/*write是用于向文件中寫數(shù)據(jù)的函數(shù)。fd只是一個(gè)整數(shù),在open時(shí)產(chǎn)生。起到一個(gè)索引的作用,進(jìn)程通過PCB中的文件描述符表找到該fd所指向的文件指針filp。從tel0的地址起,寫入sizeof(long int)個(gè)字符。*/ :close(fd

6、); / 釋放file結(jié)構(gòu)體。 return false; if(:close(fd) = -1) return false;return true; bool fanxuliehua(const char *lujing) /反序列化,參數(shù)是文件名以及路徑。 int fd = :open(lujing, O_RDWR); /以讀寫方式打開。if(-1 = fd) return false; /打開失敗。int r = (:read(fd, &tel0, sizeof(long int) && (:read(fd, &tel1, sizeof(long int)

7、;if(-1 = r) :close(fd); return false; /讀失敗。if(:close(fd) = -1) return false;return true; private: long int tel0,tel1; /電話號(hào)碼賦值變量。 ;int main() SAD a( ,35899);a.show(); /顯示序列化前的電話號(hào)碼。a.xuliehua("data"); /序列化。 SAD a;a.fanxuliehua("data");a.reshow(); /顯示序列化后的電話號(hào)碼。 return 0;執(zhí)行編譯并運(yùn)行后的運(yùn)行結(jié)

8、果如下圖1.1:圖1.1 版本一序列化運(yùn)行結(jié)果流程圖如下:開始初始化序列化電話號(hào)碼顯示數(shù)據(jù)反序列化顯示恢復(fù)后號(hào)碼結(jié)束圖1.2版本一程序流程圖2、版本二程序分析:部分原代碼如下圖2.1,功能為將一個(gè)類的多個(gè)對(duì)象序列化到文件(截圖是在圖形界面的虛擬終端下進(jìn)行的,因?yàn)槲以诮K端模式下查看的中文注釋是亂碼):(a)頭文件(b)序列化子程序(c)顯示程序(d)反序列化子程序(e)主程序圖2.1 版本二代碼圖然后切換到終端模式,g+編譯運(yùn)行,得到預(yù)期結(jié)果,序列化完成。圖2.2 運(yùn)行結(jié)果3、版本三程序分析:版本三的功能是,將兩個(gè)不同類的多個(gè)對(duì)象序列化到文件中。其主函數(shù)部分代碼如圖3.1圖3.1 主函數(shù)代碼經(jīng)過

9、g+編譯運(yùn)行后,得到結(jié)果如下圖3.2:圖3.2 運(yùn)行結(jié)果其程序流程圖如下3.3:開始初始化:得到不同類型A、B的對(duì)象a1、a2、b1、b2把上述值存入V對(duì)V進(jìn)行序列化反序列化恢復(fù)為A的對(duì)象結(jié)束標(biāo)志nType=0?恢復(fù)為B的對(duì)象圖3.3 程序流程圖4、版本四程序分析:本程序?qū)崿F(xiàn)了將三個(gè)不同的類的多個(gè)對(duì)象序列化到文件,采用面向?qū)ο蟮姆椒ǎ檎易兓c(diǎn),抽象出需要進(jìn)行序列化的基類。當(dāng)又有新的類的對(duì)象,需要序列化到文件時(shí),不需要修改已有的代碼。其代碼如下圖4.1所示。圖4.1 主函數(shù)代碼通過g+編譯再運(yùn)行得到結(jié)果如圖4.2:圖4.2 程序結(jié)果5、版本五程序:本程序的主函數(shù)如下圖5.1所示:圖5.1 主程序運(yùn)行結(jié)果如下圖5.2所示:圖5.2 運(yùn)行結(jié)果七、總結(jié)及心得體會(huì):在本次實(shí)驗(yàn)中:1、我理解了序列化的內(nèi)涵。它是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程。序列化時(shí),把對(duì)象及其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。反序列化時(shí),就可以通過從存儲(chǔ)區(qū)中讀取對(duì)象的狀態(tài),從而重新創(chuàng)建被存儲(chǔ)的對(duì)象。2、學(xué)會(huì)了基本的序列化操作,比如將一個(gè)類的一個(gè)對(duì)象序列化到文件、將一個(gè)類的多個(gè)對(duì)象序列化到文件、將兩個(gè)類的多個(gè)對(duì)象序列化到文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論