boost::Serialize VS std::fstream
boost::Serialize VS std::fstream
嘿,我想我对boost::serialize:
的目的有点困惑必须为你计划保存的每个类添加boost::serialize函数似乎有点违背了库的目的,因为比起提高/减少开发时间,它似乎会增加大量的时间,因为你必须进入并编辑你使用的每个库中的每个类的源代码,所以它有一个序列化函数
。我计划使用它的SFML/Box2D游戏,但现在我有第二个想法,一旦我认为这通过....我使用图书馆错误吗?
似乎std::fstream将是一个更好的主意,因为它不需要对任何想要保存的类进行任何函数或更改,并且我可以设计一个"保存类"。
呃,什么?提振。序列化不能替代I/O流。它是一个序列化框架(即从外部存储保存和恢复对象的状态),归档仍然包装某种流来实际读取和写入数据。当然,你需要编写序列化函数,库没有办法知道数据在哪里,或者它应该如何在存档中布局——如果你使用fstream
,不管这在这种情况下意味着什么,你仍然必须做同样的事情。您也不一定需要将save/load函数实现为类成员——文档说明了如何使它们成为自由函数。
直接写入标准流仍然需要编写序列化/反序列化函数对。不仅标准库的iostream组件不支持自定义类的I/O,而且仅仅写入和读取sizeof(yourObject)字节也不起作用。想想如果你的类包含指针成员会发生什么。
此外,序列化库提供了对不同格式和版本控制的支持等功能,这些功能可能很有用。
看起来std::fstream会是一个更好的主意,因为它不需要对你想要保存的任何类进行任何函数或更改,我可以设计一个"保存类"。
一个更好的主意去做什么?
序列化通常用于保存和恢复对象的状态,而不是任意数据。它的目的是能够获取一袋对象并生成一个文件,这样这些对象可以在以后的日期从该文件中自动重建。
如果你可以整理所有你想保存到一个"保存类"的信息,那么你就不需要序列化。
同样,你不能只把类写进流;您必须实现operator<<
重载或其他函数来保存其数据并将其加载回来。是的,你可以用memcpy
把物体的碎片扔出去,但这并不完全安全。所谓"不完全安全",我的意思是"除非你真的,真的知道你在做什么,否则你永远不应该这样做。"
- 使 std::fstream 写入文件末尾,但从头开始读取
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 自定义 std::fstream,std::filebuf 的溢出和下溢函数未为每个字符调用
- Windows std::fstream 修改文件后打开()?
- std::fstream 在 MSVC 和 G++ 上使用 UTF-8 的不同行为
- std::getline with std::fstream
- 变量 std::fstream 文件具有初始值设定项,但类型不完整 编译错误
- std::fstream 已使用,但编译器抛出错误
- std::fstream 需要很长时间才能将大数据写入.csv文件中
- STD :: FSTREAM在使用预先分配的内存时在Main之后崩溃
- STD :: FSTREAM文件处理重复使用的问题
- 即使在包含 std 命名空间之后,fstream 在 Visual Studio 2017 中也无法正常工作
- 使用“QUrl”作为文件路径馈送到“std::fstream”
- 为什么与cstdio和std::fstream相比,SDL_RWops在写入文件时表现如此糟糕
- 检查是否使用std :: fstream编写文件
- 为什么 std::fstream 返回 void 而不是 bool
- 为什么'ifstream'和'ofstream'被添加到"std",而'fstream'可以同时达到这两个目的?
- 正在从std::fstream检索文件描述符
- 将对象序列化为加密的 std::fstream (C++)
- 当"std::fstream"无法打开时会引发异常吗?