C++/Qt序列化操作-创新互联

序列化操作的含义顾名思义,即按一定的次序将数据保存到存储设备中,或者从存储设备中读取一定次序的数据,且数据类型要保持一致(即读出的数据是我知道的类型)。过程知道了,那怎么做呢?

创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为攸县企业提供专业的成都做网站、网站制作,攸县网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

我是借助Qt框架实现的一个简单的程序。(当然框架把复杂的部分给实现了。如果在你封装的数据中,意思是非Qt标准的数据类型,那么有必要实现"<<" 和 ">>" 运算子来实现自定义类型的序列化操作)。

具体的实现过程如下:

//order.h

#include

#include

#include

typedef struct __MY_STRCT

{

  QString _name;

  unsigned int _id;

}SMY_STRCT;

QDataStream & operator << (QDataStream& out, const SMY_STRCT &data);

QDataStream &operator >> (QDataStream& in, SMY_STRCT &data);

class OrderClsTest

{

public:

  OrderClsTest();

  void store();

  void load();

private:

  QDateTime _lastTime;

};

//order.cpp

#include "orderclstest.h"

#include

OrderClsTest::OrderClsTest()

{

  store();

}

void OrderClsTest::load()

{

  QFile file("./data.dat");

  if(!file.open(QIODevice::ReadOnly)) return ;

  SMY_STRCT _my_strct;

  QDataStream in(&file);

  in >> _lastTime >> _my_strct;

  file.close();

}

void OrderClsTest::store()

{

  QFile file("./data.dat");

  if(!file.open(QIODevice::WriteOnly)){ return ;}

  _lastTime = QDateTime::currentDateTime();

  QDataStream out(&file);

  SMY_STRCT _my_strct;

  _my_strct._id = 123;

  _my_strct._name = "hello";

  out << _lastTime << _my_strct;

  file.close();

}

QDataStream& operator << (QDataStream &out, const SMY_STRCT &data)

{

  out << data._id << data._name;

  return out;

}

QDataStream& operator >> (QDataStream &in, SMY_STRCT &data)

{

  in >> data._id  >> data._name;

  return in;

}

int main(int argc, char *argv[])

{

  OrderClsTest test;

  test.load();

}

是不是很简单?从事框架开发指导这些就行了,如果你想实现正真意义上的序列化操作,可以参考MFC 的Persistence机制,也就是我的上一个博客。你会见识的很多。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:C++/Qt序列化操作-创新互联
分享链接:http://ybzwz.com/article/ceohps.html