程序调试--基本数据类型向CFile的串行化
来源:互联网 发布:linux mediainfo 命令 编辑:程序博客网 时间:2024/04/27 21:14
程序代码:
程序执行流程:
1、CArchive构造,pFile为指向file的指针(一定不能为NULL),nMode为CArchive::store,nBufSize取了默认值为4096,lpBuf取了默认值为NULL。
在初始化的时候,m_lpBufStart、m_lpBufMax、m_lpBufCur、m_nBufSize、m_bDirectBuffer这几个成员变量比较重要。m_lpBufStart是缓冲区起始地址,m_lpBufMax是缓冲区最大地址,m_lpBufCur是缓冲区当前地址,m_nBufSize是缓冲区大小,m_bDirectBuffer表明是否是直接缓冲(如CMemFile,直接存到内存中,不写入文件)。m_lpBufCur在读取数据的时候是指向m_lpBufMax,因为在开始读取时,m_lpBufCur == m_lpBufMax表明当前缓冲区已经读取完成,将会加载新的缓冲区,这样程序就从file中读取数据来填充缓冲区。
2、串行化长整型值。
这个函数是CArchive的成员函数,在afx.inl中定义。它先检查当前缓冲区是否还能容下待写入数据。如果空间不足,先调用CArchive::Flush()函数,将缓冲区数据写入到文件中。然后,将m_lpBufCur指针转换为BYTE*,直接写入数据。
CArchive::Flush()函数过程如下:
因为m_bDirectBuffer为FALSE,所以调用第一个if子句。检测当前缓冲区指针是否不等于缓冲区起始指针,如果不等则表明缓冲区中有数据,进而调用CFile::Write()将缓冲区数据写入到文件中。
3、CArchive析构。
显然,如果缓冲区中还有数据,CArchive直接析构将导致数据丢失,所以应该在析构时再刷新一次缓冲区。
一点额外的东西。
从CArchive的构造函数可以看出CArchive允许用户自己定义缓冲区,而非由CArchive自己来管理缓冲区。同时,要使用用户自定义缓冲区,该缓冲区大小应该大于128字节。见如下示例代码:
通过调试可以发现,CArchive将数据写入到了pBuffer所指的内存区中。
- 程序调试--基本数据类型向CFile的串行化
- 程序调试--基本数据类型向CMemFile的串行化
- 程序调试--MFC基本类型串行化
- 程序调试--基本数据类型的并行化
- 程序调试--CObject对象的串行化
- 程序调试--CObject对象的串行化
- 程序调试--MFC基本数据类型并行化
- 使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作
- 使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作演示案例
- 串行程序并行化
- Palm J2ME串行通讯程序编写调试
- 串行接口的基本特点
- 基本.NET深串行化
- 基本数据类型-变量的使用
- 一段基本的X86调试程序
- 酥饼机的基本调试程序介绍
- MFC笔记--单文档程序的串行化
- Java的数据类型-八种基本数据类型和引用数据类型
- 可对内容、文件进行加密
- Java笔试题(牢固基础成绩雄壮伟业)
- qladmin: connect to server at 'localhost' failed的解决方案!
- 数据库性能问题(1):问题排查
- log4j的配置文件解析
- 程序调试--基本数据类型向CFile的串行化
- C/C++ 程序设计员应聘常见面试试题深入剖析
- 统计成绩SQL语句
- 压缩 加密 解压 解密
- 监听器实例
- Struts2中Action访问Servlet API的三种方法
- SQLite3 C/C++ 开发接口简介(API函数) 一
- 姗姗来迟 MeeGo平板电脑有望在今年6月推出
- delete 与 delete [] 区别