2024年4月2日发(作者:)
CArchive类是使用了缓冲区,即一段内存空间作为临时数据存储地,对CArchive的
读写都先依次排列到此缓冲区,当缓冲区满或用户要求时,将此段整理后的数据读写到指
定的存储煤质。
一 般来说,CArchive封装了对该缓冲区的操作,它的好处是可以少划动硬盘以及提
高运行速度。不过对于使用MFC来说,是一个很好的封装。看看其对读写 的操作,可见
在实际编程上是非常容易出错的。对于这样的类,一定要封装好,作为一个公用函数或公
用类调用,否则在实际中像c那样散在代码的各个地方的话, 恐怕有时头会大。
有时我想,如果编程在这些地方磨洋工的话,恐怕一个大的工程软件写起来得好长时
间。所以说尽量已组件的方式,类的思路来组合前人的算法,技巧也是一种编程的进步。
所下列看其对指针的娴熟操作(也是往往出错的啊),
例如双字的插入(写)
CArchive& CArchive::operator<<(DWORD dw)
{
if (m_lpBufCur + sizeof(DWORD) > m_lpBufMax) //缓冲区空间不够
Flush(); //缓冲区内容提交到实际存储煤
质。
if (!(m_nMode & bNoByteSwap))
_AfxByteSwap(dw, m_lpBufCur); //处理字节顺序
else
*(DWORD*)m_lpBufCur = dw; //添入缓冲区
m_lpBufCur += sizeof(DWORD); //移动当前指针
return *this;
}
双字的提取(读)
CArchive& CArchive::operator>>(DWORD& dw)
{
if (m_lpBufCur + sizeof(DWORD) > m_lpBufMax) //缓冲区要读完了
FillBuffer(sizeof(DWORD) - (UINT)(m_lpBufMax - m_lpBufCur));
dw = *(DWORD*)m_lpBufCur; //读取双字
m_lpBufCur += sizeof(DWORD); //移动当前位置指针
//重新读入
内容到缓冲区


发布评论