序列化C ++对象(Serializing C++ objects)

2019-09-22 14:41发布

我想实现一个序列化类这需要在一个对象,并把它转换成一个二进制流,并存储在一个文件中。 后来,对象应该从一个文件被重建。

虽然这个功能是由BinaryFormatter的在C#中提供的,我想从头开始设计我自己的序列化类。

有人能指出一些资源?

提前致谢

Answer 1:

我一直在使用boost ::序列化库,而现在,我认为这是非常好的。 你只需要创建这样的序列化代码:

class X {
  private:
    std::string value_;
  public:
    template void serialize(Archive &ar, const unsigned int version) {
       ar & value_;
     };
 }

无需创建反序列代码(这就是为什么他们使用了和运营商)。 但是,如果你愿意,你仍然可以使用<<和>>运算符。

也有可能写一个类的序列化方法不修改(例如:如果你需要序列化来自库的对象)。 在这种情况下,你应该这样做:

namespace boost { namespace serialization {
       template
       void serialize(Archive &ar, X &x const unsigned int version) {
                    ar & x.getValue();
       };
    }}


Answer 2:

我想给你一个否定的答案。 这是不太有用的,但它仍可能。

我一直在使用升压序列化了好几年,这是我公司最大的战略失误之一。 它产生非常大的输出,这是非常缓慢的,它传播了一大堆的依赖使一切编译不可能慢,然后就很难,因为你有现有的序列化格式脱身。 此外,在不同的编译器的行为不同,因此从升级到VS2005 2010实际上导致我们写一个兼容层,这也是很难堂妹的代码是很难理解。



Answer 3:

以下是C ++系列化2个解决方案:

  • 斯蒂芬·比尔的S11N序列化库
  • 升压串行化库

我个人只与第一次一个经验,实际上只用基于文本的序列化,但我知道,这是很容易定义的二进制序列化与S11N使用。



Answer 4:

在C ++中间件作家可能会感兴趣。 它拥有超过在升压串行化库的性能优势 。 它还能自动的序列化功能创造。



文章来源: Serializing C++ objects