是否可以在C ++中序列化和反序列化对象?

我们知道c ++也是一种面向对象的编程语言,其中大多数东西都是像java这样的对象。 所以想知道Serialize和deserializfunction是否可以在c ++中使用,我们在java中也可以使用?

如果是,如何实现?

在java中我们使用Serializable接口来说明这种类型的对象可以被序列化和反序列化。

那么在c ++中如何?

出于好奇,它在c#和java中一样吗?

看一下这个:

http://www.functionx.com/cpp/articles/serialization.htm

或使用

提升:序列化http://www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html

在C ++中没有内置function。 您将不得不使用外部库,如Boost 。

您可以在不使用’new’运算符的情况下使用堆栈存储,因此该类基本上像结构一样打包,然后将整个内存区域导出到文件。 如果再次需要它,请分配内存区域并从文件中读取类数据,然后像平常一样访问它。 它不会便携,但它会起作用。 当你使用编辑器保存某些东西时,在Nintendo DS之类的机器上存储水平数据是相当不错的,虽然肯定不是很漂亮(而且在复杂的系统上也很危险!)

注意:我不建议您这样做,但它在某些嵌入式平台上是有效的,如上所述。 我只想发布一些有趣的东西,当使用palib进行开发时,自制开发人员在Nintendo DS上用C ++实际做了。

即使在java中, Serializable接口也只是一种方法。 我会在这里考虑协议缓冲区 ; 有java,C ++和C#(/ .NET)实现, 以及许多其他实现 ; 除快速,高效的二进制序列化外,还提供互操作性/可移植性。

通常,您可以编写一个名为serialize()的函数,然后执行如下操作:

 ofstream outFile; outFile.open (dirFileString.c_str(), ios::binary); outFile.write (reinterpret_cast < char *>(&x), sizeof (x)); outFile.write (reinterpret_cast < char *>(&y), sizeof (y)); 

然后有一个类似的function来读入:

 inFile.read (reinterpret_cast < char *>(&x), sizeof (x)); inFile.read (reinterpret_cast < char *>(&y), sizeof (y)); 

您可以根据需要为类对象中的多个变量执行此类操作。 干杯。

有各种库来支持C ++的序列化,但这是一个更复杂的工作。 Java中的序列化取决于对象形成单个整体树的事实,而C ++中根本不是这种情况。

使用Qt4 http://qt.nokia.com/doc/qdatastream.html为操作符<<和操作符>>提供覆盖

 template  inline QDataStream &operator>>(QDataStream &in, SOMap &map) { QDataStream::Status oldStatus = in.status(); in.resetStatus(); map.clear(); quint32 n; in >> n; for (quint32 i = 0; i < n; ++i) { if (in.status() != QDataStream::Ok) break; KT key; VT value; in >> key >> value; map.append(key, value); } if (in.status() != QDataStream::Ok) map.clear(); if (oldStatus != QDataStream::Ok) in.setStatus(oldStatus); return in; } template  inline QDataStream &operator<<(QDataStream &out, const SOMap &map) { out << quint32(map.size()); for(int i = 0, c = map.size(); i < c; ++i) { typename SOMap::pair_type n = map.at(i); out << n.first << n.second; } return out; }