序列化C++对象

Serializing C++ objects

本文关键字:对象 C++ 序列化      更新时间:2023-10-16

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

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

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

提前致谢

我想

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

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

以下是 2 种用于C++序列化的解决方案:

  • 斯蒂芬·比尔的 s11n 序列化库
  • 提升序列化库

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

我已经使用 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();
       };
    }}

C++中间件编写器可能会感兴趣。 与 Boost 中的序列化库相比,它具有性能优势。 它还自动创建序列化函数。