手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

C 应用程式中创建持久对象

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  持久对象(persistent objects)广泛应用于游戏、分布式数据库系统、多媒体连同图像应用程式中。现在C 并不直接支持持久性(persistence)(但有一些在C 未来版本中添加持久性和反射(reflection)的建议)。持久对象能够在创建他的程式的作用域之外保持自身状态。把对象写入一个文档并在以后重建之,或把对象传送到一台远程机器,就是这样的例子。对持久性的支持并不象第一眼看上去那样简单,同一对象的大小和内存布局在不同的平台上可能并不相同,而不同的字节次序(byte ordering),或称为endian-ness,使事情更加复杂化。在下文中我将讨论如何实现持久性,而无须求助于DCOM和 CORBA之类的第三方框架。对于小型和可移植的应用程式而言,这是一种有效并令人满意的方案。

  序列化(serialization)基础

  为了使一个对象持久存在,必须把他的状态保存在非易失的存储设备中。考虑一个录制和播放MP3文档的应用程式,每首单曲都表示为一个包含标题、唱片、歌手、时间、速率、录制日期连同相应的 MP3文档的对象,该应用程式在跟踪列表中显示最近播放的曲目。您的目标是通过序列化,也就是把对象写入一个文档,使MP3对象成为持久对象,同时通过反序列化(deserialization)在下一个 session中重建这些对象。

  序列化内置数据类型

  每个对象最终都由内置数据成员组成,如int, bool, char[]等等。您的第一个任务是把这样的类型写入一个输出文档流(ofstream)中。应用程式必须这些值存储为相应的二进制形式,基于这个目的,应使用write() 和read() 成员函数。write() 以某个变量的地址和大小为参数,把该变量的位模式写入一个文档流中。read() 的两个参数为char*和long类型,分别指示内存缓冲区的地址和字节大小。下面的例子演示如何在ofstream中保存两个整数:

#include <fstream>

using namespace std;
int main()
{
 int x,y; // mouse coordinates
 // ..assign values to x and y
 ofstream archive("coord.dat", ios::binary);
 archive.write(reinterpret_cast<char *>(&x), sizeof (x));
 archive.write(reinterpret_cast<char *>(&x), sizeof (x));
 archive.close();
}

  使用reinterpret_cast<>是必要的,因为write()的第一个参数类型为const char*,但&x和&y是int*类型。

  以下代码读取刚才存储的值:

#include <fstream>

using namespace std;
int main()
{
 int x,y;
 ifstream archive("coord.dat");
 archive.read((reinterpret_cast<char *>(&x), sizeof(x));
 archive.read((reinterpret_cast<char *>(&y), sizeof(y));
}



[1] [2] 下一页

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS