我正在研究 C++ 中的序列化。 boost::serialization
与类似的东西相比有什么优势/区别:
ifstream_obj.read(reinterpret_cast<char *>(&obj), sizeof(obj)); // read
// or
ofstream_obj.write(reinterpret_cast<char *>(&obj), sizeof(obj)); // write
// ?
以及,哪个更好用?
最佳答案
Boost 序列化的一大优势是:
- 它实际上适用于非平凡 (POD) 数据类型(C++ 不是 C)
- 它允许您将序列化代码与存档后端分离,从而为您提供文本、xml、二进制序列化
- 如果您使用适当的存档,您甚至可以拥有可移植性(用您的样本试试)。这意味着您可以在一台机器/操作系统/版本上发送并在另一台机器/操作系统/版本上接收而不会出现问题。
最后,它添加了 (a) 层抽象,这使得事情更不容易出错。当然,您可以对建议的序列化方法执行相同的操作而不会出现太大问题。
这是一个可以安全地执行您建议的那种序列化的答案:
请注意,Boost Serialization 完全了解按位可序列化类型,您也可以告诉它您自己的类型:
关于数据结构的 C++ 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999961/