:
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:
图3.3程序流程图
4、版本四程序分析:
本程序实现了将三个不同的类的多个对象序列化到文件,采用面向对象的方法,查找变化点,抽象出需要进行序列化的基类。
当又有新的类的对象,需要序列化到文件时,不需要修改已有的代码。
其代码如下图4.1所示。
图4.1主函数代码
通过g++编译再运行得到结果如图4.2:
图4.2程序结果
5、版本五程序:
本程序的主函数如下图5.1所示:
图5.1主程序
运行结果如下图5.2所示:
图5.2运行结果
七、总结及心得体会:
在本次实验中:
1、我理解了序列化的内涵。
它是将对象的状态信息转换为可以存储或传输的形式的过程。
序列化时,把对象及其当前状态写入到临时或持久性存储区。
反序列化时,就可以通过从存储区中读取对象的状态,从而重新创建被存储的对象。
2、学会了基本的序列化操作,比如将一个类的一个对象序列化到文件、将一个类的多个对象序列化到文件、将两个类的多个对象序列化到文件以及按照面向对象的方法,解决多个类的多个对象序列化到文件的问题。
八、对本实验过程及方法、手段的改进建议:
此次实验整体顺利,同学们可以在课后尝试更多的序列化方法。
积极创新,提高技能。
该实验让我学到了许多实际的原理与思想。
老师讲课层层递进,给了我们充足时间练习。
报告评分:
指导教师签字: