C++里怎样序列化一个对象,什么是序列化啊有什么用呢?解决思路
C++里怎样序列化一个对象,什么是序列化啊,有什么用呢?
如题所示:C++里怎样序列化一个对象,什么是序列化啊,有什么用呢?
请大家指教,最好最一个例子来!!!
------解决方案--------------------
序列化就是把内存中的数据存储到磁盘上,换句话说,就是保存应用程序某个时间点的运行状态数据,
其实序列化可以理解成基本的I/O,
在vc mfc里一般使用CArchive来完成序列化,
比如:
int i=5;
CFile file;
file.Open("XXX",CFile::modeWrite);
CArchive ar(&file,CArchive::store);
ar<<i;
这是存,
取再反过来就行啦
int i;
CFile file;
file.Open("XXX",CFile::modeRead);
CArchive ar(&file,CArchive::load);
ar>>i;
类的序列化一般是在类里重载一个虚方法,Serialize(),你查查文档很容易的
------解决方案--------------------
楼主去网上搜索CArchive这个类就清楚了,在网络传输中很有用
------解决方案--------------------
主要是文件存储时使用的
CArchive& ar;
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
m_obArray.Serialize(ar);
------解决方案--------------------
要用序列化必须从CObject继承
------解决方案--------------------
序列化还有一个作用,可以优化数据的存储空间。平时一个 10 M 的文件“压缩”后为什么只有 1M?大概是这个道理吧。.
------解决方案--------------------
void CYHXX:: Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar<<XingM;
ar<<XingB;
ar<<NianL;
ar<<HunYZK;
ar<<ZiY;
}
if(ar.IsLoading())
{
ar>>XingM;
ar>>XingB;
ar>>NianL;
ar>>HunYZK;
ar>>ZiY;
}
}
------解决方案--------------------
CYHXX cy;
cy.XingM="fff";
cy.XingB="fff";
......
//存
CFile file;
file.Open("1.txt",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
cy.Serialize(ar);
------解决方案--------------------
------解决方案--------------------
蹭分. 补充, vc中的 CArchive不但能存储到文件中,还能根据 运行时类型信息 读取 从 CObject继承下来的类并初始化它. 在VC中的 DECLEAR_SERILIZE就是配合CArchive干这事的.
我开了个网站,欢迎访问 www.nunew.com
如题所示:C++里怎样序列化一个对象,什么是序列化啊,有什么用呢?
请大家指教,最好最一个例子来!!!
------解决方案--------------------
序列化就是把内存中的数据存储到磁盘上,换句话说,就是保存应用程序某个时间点的运行状态数据,
其实序列化可以理解成基本的I/O,
在vc mfc里一般使用CArchive来完成序列化,
比如:
int i=5;
CFile file;
file.Open("XXX",CFile::modeWrite);
CArchive ar(&file,CArchive::store);
ar<<i;
这是存,
取再反过来就行啦
int i;
CFile file;
file.Open("XXX",CFile::modeRead);
CArchive ar(&file,CArchive::load);
ar>>i;
类的序列化一般是在类里重载一个虚方法,Serialize(),你查查文档很容易的
------解决方案--------------------
楼主去网上搜索CArchive这个类就清楚了,在网络传输中很有用
------解决方案--------------------
主要是文件存储时使用的
CArchive& ar;
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
m_obArray.Serialize(ar);
------解决方案--------------------
要用序列化必须从CObject继承
------解决方案--------------------
序列化还有一个作用,可以优化数据的存储空间。平时一个 10 M 的文件“压缩”后为什么只有 1M?大概是这个道理吧。.
------解决方案--------------------
void CYHXX:: Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar<<XingM;
ar<<XingB;
ar<<NianL;
ar<<HunYZK;
ar<<ZiY;
}
if(ar.IsLoading())
{
ar>>XingM;
ar>>XingB;
ar>>NianL;
ar>>HunYZK;
ar>>ZiY;
}
}
------解决方案--------------------
CYHXX cy;
cy.XingM="fff";
cy.XingB="fff";
......
//存
CFile file;
file.Open("1.txt",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
cy.Serialize(ar);
------解决方案--------------------
------解决方案--------------------
蹭分. 补充, vc中的 CArchive不但能存储到文件中,还能根据 运行时类型信息 读取 从 CObject继承下来的类并初始化它. 在VC中的 DECLEAR_SERILIZE就是配合CArchive干这事的.
我开了个网站,欢迎访问 www.nunew.com