Linux高級編程實驗實驗2報告_第1頁
Linux高級編程實驗實驗2報告_第2頁
Linux高級編程實驗實驗2報告_第3頁
Linux高級編程實驗實驗2報告_第4頁
Linux高級編程實驗實驗2報告_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、/*使用虛析構(gòu)。在析構(gòu)時防止只析構(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對象和const對象調(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表示若欲打開的文件不存在則自動建立該文件.O_TRUNC表示若文件存在并且以可寫的方式打開時,此旗標會令文件長度清為0,而原來存于該文件的

5、資料也會消失.若所有欲核查的權限都通過了檢查則返回0值,表示成功,只要有一個權限被禁止則返回-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只是一個整數(shù),在open時產(chǎn)生。起到一個索引的作用,進程通過PCB中的文件描述符表找到該fd所指向的文件指針filp。從tel0的地址起,寫入sizeof(long int)個字符。*/ :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; /電話號碼賦值變量。 ;int main() SAD a( ,35899);a.show(); /顯示序列化前的電話號碼。a.xuliehua("data"); /序列化。 SAD a;a.fanxuliehua("data");a.reshow(); /顯示序列化后的電話號碼。 return 0;執(zhí)行編譯并運行后的運行結(jié)

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

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

溫馨提示

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

評論

0/150

提交評論