序列化C ++对象

时间:2012-09-19 16:41:01

标签: c++ serialization marshalling deserialization unmarshalling

我想实现一个序列化类,它接受一个对象并将其转换为二进制流并存储在一个文件中。之后,应该从文件中重建对象。

虽然这个功能是由C#中的BinaryFormatter提供的,但我想设计一下 从头开始拥有Seri​​alization类。

有人能指出一些资源吗?

提前致谢

4 个答案:

答案 0 :(得分:5)

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

我多年来一直在使用boost序列化,这是我公司最大的战略错误之一。它产生非常大的输出,它非常慢,它传播了一大堆依赖项,使得编译所有东西都很慢,然后因为你有现有的序列化格式而很难退出。此外,它在不同的编译器上表现不同,因此从VS2005升级到2010实际上导致我们编写了一个兼容层,这也很难,因为代码很难理解。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

我一直在使用boost :: serialization库一段时间,我认为它非常好。您只需要创建如下的序列化代码:

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();
       };
    }}

答案 3 :(得分:0)

C++ Middleware Writer可能会引起关注。它有performance advantages over the serialization library in Boost。它还可以自动创建序列化函数。