我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在一个文件中。稍后,应该从文件中重建对象。
虽然这个功能是由 C# 中的 BinaryFormatter 提供的,但我想从头开始设计我自己的序列化类。
有人可以指出一些资源吗?
提前致谢
我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在一个文件中。稍后,应该从文件中重建对象。
虽然这个功能是由 C# 中的 BinaryFormatter 提供的,但我想从头开始设计我自己的序列化类。
有人可以指出一些资源吗?
提前致谢
我想给你一个否定的答案。它不太有用,但它仍然可能有用。
几年来我一直在使用 boost 序列化,这是我公司最大的战略错误之一。它产生非常大的输出,非常慢,它传播了一大堆依赖项,使得所有东西编译起来都非常慢,然后很难摆脱,因为你有现有的序列化格式。此外,它在不同的编译器上表现不同,因此从 VS2005 升级到 2010 实际上导致我们编写了一个兼容层,这也很难,因为代码很难理解。
以下是 C++ 序列化的 2 个解决方案:
我个人只有第一个经验,实际上只使用基于文本的序列化程序,但我知道定义二进制序列化程序以与 s11n 一起使用很容易。
我已经使用 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();
};
}}
C++ Middleware Writer可能很有趣。与 Boost 中的序列化库相比,它具有性能优势。它还自动创建序列化函数。