




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子科技大学实验报告学生姓名:学号:指导教师:李林试验地点:清水河主楼A2-412试验时间:.11.16一、试验室名称:Linux环境高级编程试验室二、试验项目名称:对象序列化试验三、试验课时:8课时四、试验目的:学习序列化原理与措施,掌握基本的序列化技巧五、试验内容:版本1:将一种类的一种对象序列化到文献版本2:将一种类的多种对象序列化到文献版本3:将两个类的多种对象序列化到文献版本4:按照面向对象的措施,处理多种类的多种对象序列化到文献的问题版本5:序列化的目的地不仅可以是文献,还可以是其他,即可配置性六、试验环节:1、版本一程序分析:源程序如下,功能是将一种类的一种对象(电话号码)序列化到文献:#include<fcntl.h>#include<iostream>#include<vector>#include<string.h>classSAD//SerializeAndDeserialize{public:SAD()//构造函数。{ tel0=tel1=0;//将电话号码提成两个int变量保留。}explicitSAD(longintm,longintk){ tel0=m;tel1=k;}virtual~SAD()/*使用虚析构。在析构时防止只析构基类而不析构派生类的状况发生,导致内存泄漏。*/{}public:voidreshow()//用于打印出变量的值。{ std::cout<<"TELofrecovery:"<<tel0<<tel1<<std::endl;}public:voidshow()//用于打印出电话的值。{ std::cout<<"TELbeforeSerialize:"<<tel0<<tel1<<std::endl;}public:boolxuliehua(constchar*lujing)const/*非静态组员函数背面加了const的组员函数可以被非const对象和const对象调用。*/{ intfd=::open(lujing,O_RDWR|O_CREAT|O_TRUNC,0);/*open函数位于fcntl.h中。open函数用于打开和创立文献。pFilePath表达文献名,参数O_RDWR表达以可读写方式打开文献.O_CREAT表达若欲打开的文献不存在则自动建立该文献.O_TRUNC表达若文献存在并且以可写的方式打开时,此旗标会令文献长度清为0,而本来存于该文献的资料也会消失.若所有欲核查的权限都通过了检查则返回0值,表到达功,只要有一种权限被严禁则返回-1.*/ if(-1==fd) returnfalse; if((::write(fd,&tel0,sizeof(longint)))&&(::write(fd,&tel1,sizeof(longint)))==-1)/*write是用于向文献中写数据的函数。fd只是一种整数,在open时产生。起到一种索引的作用,进程通过PCB中的文献描述符表找到该fd所指向的文献指针filp。从tel0的地址起,写入sizeof(longint)个字符。*/ { ::close(fd);//释放file构造体。 returnfalse; } if(::close(fd)==-1) returnfalse; returntrue;}boolfanxuliehua(constchar*lujing)//反序列化,参数是文献名以及途径。{ intfd=::open(lujing,O_RDWR);//以读写方式打开。 if(-1==fd) returnfalse;//打开失败。 intr=(::read(fd,&tel0,sizeof(longint)))&&(::read(fd,&tel1,sizeof(longint))); if(-1==r) { ::close(fd); returnfalse;//读失败。 } if(::close(fd)==-1) returnfalse; returntrue;}private:longinttel0,tel1;//电话号码赋值变量。};intmain(){{ SADa(135479,35899); a.show();//显示序列化前的电话号码。 a.xuliehua("data");//序列化。}{ SADa; a.fanxuliehua("data"); a.reshow();//显示序列化后的电话号码。}return0;}执行编译并运行后的运行成果如下图1.1:图1.1版本一序列化运行成果流程图如下:开始开始初始化序列化电话号码显示数据反序列化显示恢复后号码结束图1.2版本一程序流程图2、版本二程序分析:部分原代码如下图2.1,功能为将一种类的多种对象序列化到文献(截图是在图形界面的虚拟终端下进行的,由于我在终端模式下查看的中文注释是乱码):(a)头文献(b)序列化子程序(c)显示程序(d)反序列化子程序(e)主程序图2.1版本二代码图然后切换到终端模式,g++编译运行,得到预期成果,序列化完毕。图2.2运行成果3、版本三程序分析:版本三的功能是,将两个不一样类的多种对象序列化到文献中。其主函数部分代码如图3.1图3.1主函数代码通过g++编译运行后,得到成果如下图3.2:图3.2运行成果其程序流程图如下3.3:开始开始初始化:得到不一样类型A、B的对象a1、a2、b1、b2把上述值存入V对V进行序列化反序列化恢复为A的对象结束标志nType=0?恢复为B的对象图3.3程序流程图4、版本四程序分析:本程序实现了将三个不一样的类的多种对象序列化到文献,采用面向对象的措施,查找变化点,抽象出需要进行序列化的基类。当又有新的类的对象,需要序列化到文献时,不需要修改已经有的代码。其代码如下图4.1所示。图4.1主函数代码通过g++编译再运行得到成果如图4.2:图4.2程序成果5、版本五程序:本程序的主函数如下图5.1所示:图5.1主程序运行成果如下图5.2所示:图5.2运行成果七、总结及心得体会:在本次试验中:1、我理解了序列化的内涵。它是将对象的状态信息转换为可以存储或传播的形式的过程。序列化时,把对象及其目前状态写入到临时或持久性存储区。反序列化时,就可以通过从存储区中读取对象的状态,从而重新创立被存储的对象。2、学会了基本的序列化操作,例如将一种类的一种对象序列化到文献、将一种类的多种对象序列化到文献、将两个类的多种对象序列化到文献以及按照面向对象的措施,处理多种类的多种对象序列化到文献的问题。八、对本试验过程及措施、手段的改善
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全面家居装修合同:一站式家庭装修协议
- 2025年xx村干部个人自查自纠报告
- 《地产营销策略》课件
- 《针灸治疗偏头痛》课件
- 海尔冰柜新品上市活动媒介策略
- 遂宁职业学院《朝鲜语高级阅读I》2023-2024学年第二学期期末试卷
- 宁夏财经职业技术学院《大学计算机基础Ⅱ》2023-2024学年第二学期期末试卷
- 辽宁省营口市大石桥市水源镇2025年5月中考二模英语试题含答案
- 西安邮电大学《颜系行草(2)(唐五代书法史论)》2023-2024学年第二学期期末试卷
- 江西师范大学科学技术学院《计算机网络前沿技术》2023-2024学年第二学期期末试卷
- 整理【越南】环境保护法
- 河北工业大学硕士生指导教师(含新申请者)简况表.
- TAIYE370-DTH-IV液压钻机操作维护说明书
- 金属压铸机的plc控制
- 吉林大学第一临床医学院进修人员申请表
- 吉尔吉斯斯坦共和国公司法
- 进制转换(课堂PPT)
- C++程序设计(谭浩强完整版).pdf
- 小学美术课件--第6课-《献给母亲的礼物》-赣美版--(15张PPT)ppt课件
- 建设工程模板支撑体系安全管理重点及措施
- 送达地址确认书(样式)
评论
0/150
提交评论