




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上电 子 科 技 大 学实 验 报 告学生姓名: 学 号: 指导教师:李林实验地点:清水河主楼A2-412 实验时间:2016.11.16一、实验室名称:Linux环境高级编程实验室二、实验项目名称:对象序列化实验三、实验学时:8学时四、实验目的:学习序列化原理与方法,掌握基本的序列化技巧五、实验内容:l 版本1:将一个类的一个对象序列化到文件l 版本2:将一个类的多个对象序列化到文件l 版本3:将两个类的多个对象序列化到文件l 版本4:按照面向对象的方法,解决多个类的多个对象序列化到文件的问题l 版本5:序列化的目的地不仅可以是文件,还可以是其他,即可配置性六、实验步
2、骤:1、版本一程序分析:源程序如下,功能是将一个类的一个对象(电话号码)序列化到文件:#include <fcntl.h>#include <iostream>#include <vector>#include<string.h>class SAD /Serialize And Deserializepublic: SAD() / 构造函数。 tel0 = tel1 = 0; /将电话号码分成两个int变量保存。 explicit SAD( long int m,long int k) tel0 = m;tel1=k; virtual SAD()
3、/*使用虚析构。在析构时防止只析构基类而不析构派生类的状况发生,造成内存泄漏。*/ 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/*非静态成员函数后面加了const的成员函数可以被非const对象和const对象调用。*/ int fd = :open(lujing, O_RDWR | O_CREAT | O_TRUNC, 0);/*open函数位于fcntl.h中。open 函数用于打开和创建文件。pFilePath表示文件名,参数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是用于向文件中写数据的函数。fd只是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。从tel0的地址起,写入sizeof(long int)个字符。*/ :close(fd
6、); / 释放file结构体。 return false; if(:close(fd) = -1) return false;return true; bool fanxuliehua(const char *lujing) /反序列化,参数是文件名以及路径。 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;执行编译并运行后的运行结
8、果如下图1.1:图1.1 版本一序列化运行结果流程图如下:开始初始化序列化电话号码显示数据反序列化显示恢复后号码结束图1.2版本一程序流程图2、版本二程序分析:部分原代码如下图2.1,功能为将一个类的多个对象序列化到文件(截图是在图形界面的虚拟终端下进行的,因为我在终端模式下查看的中文注释是乱码):(a)头文件(b)序列化子程序(c)显示程序(d)反序列化子程序(e)主程序图2.1 版本二代码图然后切换到终端模式,g+编译运行,得到预期结果,序列化完成。图2.2 运行结果3、版本三程序分析:版本三的功能是,将两个不同类的多个对象序列化到文件中。其主函数部分代码如图3.1图3.1 主函数代码经过
9、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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年河南单招英语模拟试题及答案
- 水利水电建筑工程专业2019年单招大纲及样题参考答案
- 静脉输液血栓栓塞的预防及处理
- 北京印刷学院《名著导读》2023-2024学年第一学期期末试卷
- 面部护肤知识普及课件
- 温州医科大学仁济学院《GMP法规及实务》2023-2024学年第二学期期末试卷
- 2025年高考语文写作满分作文范文9篇
- 毛泽东思想的形成和发展
- 湖南省株洲市醴陵第二中学2024-2025学年高三4月一模试卷语文试题含解析
- 湖北医药学院《普通生物学》2023-2024学年第二学期期末试卷
- GB/T 5972-2016起重机钢丝绳保养、维护、检验和报废
- GB/T 4802.1-2008纺织品织物起毛起球性能的测定第1部分:圆轨迹法
- GB/T 15098-1994危险货物运输包装类别划分原则
- 单组份室温固化硅橡胶物质安全数据表MSDS模板
- 2022年北京事业单位招聘考试真题及答案解析
- 机动车检测站突发环境污染事件应急预案
- 关于赴XXX医院参观学习联系函
- 【汇总】高二政治选择性必修三(统编版) 重点知识点汇总
- T∕CIS 71001-2021 化工安全仪表系统安全要求规格书编制导则
- 体医融合与健康中国课件
- 福利院装修改造工程施工组织设计(225页)
评论
0/150
提交评论