程序代码
CArchive构造的时候,最后一句
m_lpBufCur = (IsLoading()) ? m_lpBufMax : m_lpBufStart;
如果是并行化,则m_lpBufCur = m_lpBufMax; 也就是说当前指针指向了最后的位置。
接下来,调用CArchive的operator>>函数。
因为当前m_lpBufCur = m_lpBufMax,所以,会调用FillBuffer()来填充缓冲区。然后将当前缓冲区指针转换成LONG指针,读取数值。
CArchive::FillBuffer()读取数据填充缓冲区。它的入参nBytesNeeded表明了需要多少字节。
对于块设备,它只读取需要的字节数;对于文件,它从文件中读取数据尽可能塞满缓冲区;对于直接缓冲,它获取下一个m_nBufferSize大小的缓冲区界面。