数据结构的 C++ 序列化

标签 c++ file serialization boost

我正在研究 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/

相关文章:

c++ - 模板的隐式特化是什么意思?

C++/XCode - 类型 'const double' 的绑定(bind)值引用类型 'double' 删除 'const' 限定符

c - 从 (C) 中的文件中删除字节而不创建新文件

r - 如何在本地硬盘上将 Shiny 的 react 性数据框作为 csv 存储并附加新条目

java - 是否可以忽略@JsonSerialize 注释?

java - 在 Kryo 中序列化和反序列化对象数组

C++:如何调试 "General Protection Exception"?

c++ - OSX 上的 glDrawElements CPU 使用率很高

c - 从txt文件读入数组

c# - 如何将值结构数组转换为字节?