• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Serialization入门读物---PART1

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 11次 | 进入软件测试论坛讨论

领测软件测试网

系列化入门读物

这个指南描述如何轻松地系列化一个简单的对象。

这篇文章包含三个部分。

PART1  介绍基本的系列化

PART2  解释如何有效地读取无效数据和支持版本。

PART3  描述如何对复杂的对象进行系列化。

 

系列化入门读物-PART1

系列化是从永久存储媒体(例如:磁盘文件)读取或者写入对象的处理过程。系列化一个对象需要3个因素:1、一个CFile表示数据文件;2、一个CArchive对象提供对系列化上下文件的支持;对象是可系列化的。

 

Step 1 - Open the datafile(打开数据文件)

对文件“foo.dat”中的对象进行系列化,需要用适当的方式打开文件。在这个例子中,文件打开只用了:read/write方式。

// Open file "foo.dat"  CFile* pFile = new CFile();  ASSERT (pFile != NULL);  if (!pFile->Open ("foo.dat", CFile::modeReadWrite | CFile::shareExclusive)) {      // Handle error      return;  }

Step 2 - Hook up the archive(与archive连接)

下一步,把一个CArchive对象与此文件连接,Archive提供了有效的方法进行永久存储。你可以从archive存取数据来代替直对文件进行存取。Archive需要知道你将要用它进行存取的数据。在这个例子,我们假定你要进行写数据操作。

// Create archive ...  bool bReading = false;  // ... for writing  CArchive* pArchive = NULL;  try  {    pFile->SeekToBegin();    UINT uMode = (bReading ? CArchive::load : CArchive::store);    pArchive = new CArchive (pFile, uMode);    ASSERT (pArchive != NULL);  }  catch (CException* pException)  {    // Handle error    return;  }

Step 3 - Serialize the object(系列化对象)

最后,我们serialize对象通过调用serialize()方法。在MFC的Cobject中Serialize()已经建立,但是它不做事情。并且,你不用从Cobject派生你的对象。我们的serialize()方法拥有一个Carchive的指针且返回整型的状态。

int CFoo::serialize    (CArchive* pArchive)  {    int nStatus = SUCCESS;     // Serialize the object ...    ...        return (nStatus);  }

一会儿我们将进行实际系列化操作,其间我们将看到重要的两个问题:

l         对永久存储器的读和写都是用Cfoo::serialize()方法。

l         Cfoo::serizlize()并不知道其进行访问的文件的任何信息。

假定Cfoo是描述一个包含一对成员数据的职工记录:

class CFoo  {    // Construction/destruction    public:      CFoo::CFoo();      virtual CFoo::~CFoo();     // Methods    public:      int serialize (CArchive* pArchive);     // Data members    public:      CString  m_strName;  // employee name      int      m_nId;      // employee id  };

我们用Carchive的流操作运算符<<和>>对文档进行读写。对于int,float,DWORD和Cstring对象这些简单的数据类型,CArchive知道如何进行serizlize。Carchive同样知道是进行读还是写,你可以通过Carchive::IsStoring()进行查询。Cfoo对象的系列化方法如下:

int CFoo::serialize    (CArchive* pArchive)  {    int nStatus = SUCCESS;     // Serialize the object ...    ASSERT (pArchive != NULL);    try    {      if (pArchive->IsStoring()) {         // Write employee name and id         (*pArchive) << m_strName;         (*pArchive) << m_nId;      }      else {         // Read employee name and id         (*pArchive) >> m_strName;         (*pArchive) >> m_nId;      }    }    catch (CException* pException)    {      nStatus = ERROR;    }    return (nStatus);  }

Step 4 - Clean up(清除对象)

当你结束系列化进,你一定要进行清除从而关闭archive和数据文件。

  pArchive->Close();  delete pArchive;  pFile->Close();  delete pFile();

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网