MFC中Serialize函数的读写原理解决思路

MFC中Serialize函数的读写原理
在MFC关于文件读写的操作,可以使用Serialize函数:

void CGraphicApp::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// storing code
int i = 0;
ar << i;
}
else
{
// loading code
char c = 'a';
ar >> c;
}
}

在CFile中,都是单独分别调用CFile::Read和CFile::Write来读写文件,但是,为什么,在这里IsStoring函数可以进行判断啊?判断的依据是什么?(IsStoring是怎么判断当前的ar是读还是写?)

另外,相比CFile,Serialize,HANDLE hfile(句柄操作文件),FILE,ifstream与ofstream这几个文件读写方式相比,那个更好呢?
Serialize

------解决方案--------------------
你可以看看哪里调用了Serialize函数,参数CArchive ar是怎么产生的,就可以了解为什么可以判断了。

文件读写方式没有更好,只有适合的范围,底层都是调用CreateFile/ReadFile/WriteFile这些API函数去做的,只不过包装的层次不一样,CFile是一个MFC类,只能在MFC框架下用,因为对象化,操作比较方便;C++流也是对系统API的包装,但是带的库在不同操作系统上可以实现不同,所以可以实现代码兼容,比如Linux下也可以用。还有你说的FILE,貌似C的fopen这些函数,一样也要调用系统API,和流类似,适合C的方式。