设为首页 加入收藏

TOP

3.3.3 使用CArchive类进行序列化(1)
2013-10-07 15:55:35 来源: 作者: 【 】 浏览:81
Tags:3.3.3 使用 CArchive 进行 序列化

3.3.3  使用CArchive类进行序列化(1)

MFC中,CArchive对象可以将数据序列化(按照顺序)写入与它相关联的文件中去。它提供类型安全的缓冲机制。下面将讲解一下CArchive类常用的函数。

(1) 工作原理

CArchive类对象在初始化时,首先指定一个缓冲区作为临时存储,再将需要保存的数据写到缓冲区中。当缓冲区被填满时,才将缓冲区中的内容写入它所指向的CFile文件对象中。

同样,当用户读取数据时,串行化对象将数据从文件读取到指定的缓冲区,再从缓冲区读取到与对象相关联的文件中。这样,使用缓冲区不但减少了对物理硬盘的操作次数,而且提高了程序的运行速度。

(2) 串行化对象

在通常情况下,CArchive类使用构造函数创建指定的串行化对象,并且与CSocketFile对象相关联。其语法格式如下:

  1. CArchive::CArchive(CFile *pfile, UINT nMode,  
  2. int nBufsize, void *lpBuf=NULL); 

参数pfile指向一个需要进行串行化的对象指针。nMode是设置创建对象的标志。如果用户设置了此标志,则必须在对象销毁前调用Close()函数关闭文件。否则,文件中的数据将会被损坏。该参数的常用标志如表3-6所示。

表3-6  nMode的常用标志

常用标志< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

标志所表示的意义

CArchive::load(store)

从文件中读取(保存)数据

参数nBufsize用于设置的缓冲区大小;lpBuf用于自定义缓冲区,默认情况下为NULL。例如下面的代码:

  1. CSocket *m_clientsocket = new CSocket;                   //创建套接字    
  2. CSocketFile *m_sockfile =   
  3. new CSocketFile(&m_clientsocket); //创建与m_clientsocket关联的对象    
  4. CArchive *m_archive =   
  5. new CArchive(&m_sockfile, CArchive::load|CArchive::store, 100, NULL);   

在上述代码中,为创建的串行化对象m_archive设置一个大小为100的缓冲区。最后一个参数设为NULL,表明缓冲区由系统决定。

(3) 串行化操作

在CArchive类中,是使用函数ReadString()和WriteString()实现对CSocketFile文件的读写操作。函数的语法格式如下:

  1. UINT CArchive::ReadString(CString str);  
  2. void CArchive::WriteString(CString str1); 

上述两个函数均包含一个字符串类型的参数。但是,其具体含义却不同,分别如下:

str:表示将读取后保存的字符串数据。

str1:表示将写入的字符串数据。

除了上面的方法以外,还可以使用串行化操作的基本方法。代码如下:

  1. ...                                 //省略部分代码    
  2. m_archive<<str;                 //向串行化对象m_archive写入字符串str    
  3. m_archive>>str1;                //从串行化对象m_archive读出数据到str1    
  4. m_archive->Close();            //关闭串行化对象m_archive   
在此需要注意,在关闭串行化对象后,与其相关联的文件对象也会随之被关闭。函数CArchive::Close()用于清除CArchive类创建时所指定的缓冲区,再关闭CArchive对象,并且将CArchive对象和与之相关联的CSocketFile对象进行分离。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.3.2 使用CSocketFile类 下一篇3.3.3 使用CArchive类进行序列化..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)
·labview中tcp/ip通信 (2025-12-25 05:19:13)
·新书介绍《Python数 (2025-12-25 04:49:47)
·怎么利用 Python 进 (2025-12-25 04:49:45)