4

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

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

有人可以指出一些资源吗?

提前致谢

4

4 回答 4

5

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

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

于 2012-09-19T21:14:08.283 回答
3

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

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

于 2012-09-19T19:29:04.587 回答
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();
       };
    }}
于 2012-09-19T19:50:31.537 回答
0

C++ Middleware Writer可能很有趣。与 Boost 中的序列化库相比,它具有性能优势。它还自动创建序列化函数。

于 2012-09-19T23:40:41.937 回答