c++ - 保存对象并以任何特定顺序加载它们

标签 c++ serialization

我正在寻找一种方法来保存和加载文件中的多种对象,并能够根据某种唯一标识符以任何特定顺序加载它们。我希望将每种类型对象的所有实例都存储在一个特定的不同文件中(例如 class1instances.dat、class2instances.dat 等等)。

我看过 Boost Serialization,但它似乎只能以与保存对象相同的(反向)顺序加载对象。我应该尝试扩展他们的 Archive 类,还是已经做了一些事情但我错过了?

最佳答案

每个类只有两个文件,而不是一个:“class1instances.dat”和“class1indeces.dat`。

第一个类是对象的连续文件,一个接一个。第二个文件用作第一个文件中对象的索引。它包含对象在第一个文件中的位置。例如,class1indeces.dat 看起来像:

0
1235
12343
43455
899432

意味着,第一个对象位于文件“class1instances.dat”的位置 0。第二个对象位于 1235 位置,依此类推。然后使用流搜索功能开始阅读。

另一种索引方式是key-value。您可以为每个对象拥有一个唯一的 ID,并写入每个对象 ID 及其对应的索引。例如:

0:0
2:1235
1:12343
320:43455
3:899432

例如,要检索 ID = 320 的对象,只需在文件中线性搜索 ID 320。当您找到它时,使用它的相应位置开始从它读取对象,直到下一个位置。

您还可以使用流 bin 模式来序列化您的对象。 Example .

关于c++ - 保存对象并以任何特定顺序加载它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098983/

相关文章:

ruby-on-rails - Rails 保存序列化对象失败?

c++ - C++ boost 二进制序列化库是否向后/向前兼容?

c++ - 如何使用 DirectShow 和网络摄像头预览图像

C++ cin一直在跳

java - 从二进制文件读取并将某些信息转换为字符串

java - 具有不常见 getter 方法名称的序列化中的 Jackson 命名约定问题

arrays - 为什么 BSON 序列化的 numpy 数组比原始数组大得多?

c++ - 在 QT 应用程序中使用 Windows 10 屏幕键盘

c++ - 暴力异或密码

c++ - 模板默认参数 SFINAE 与 clang 不明确,适用于 g++