我正在寻找一种方法来保存和加载文件中的多种对象,并能够根据某种唯一标识符以任何特定顺序加载它们。我希望将每种类型对象的所有实例都存储在一个特定的不同文件中(例如 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/