我正在寻找一种方法来保存和加载文件中的几种对象,并能够基于某种唯一标识符以任何特定顺序加载它们。我希望将每种类型对象的所有实例都存储在一个特定的不同文件中(例如 class1instances.dat、class2instances.dat 等)。
我查看了 Boost Serialization 但它似乎只能以保存对象的相同(反向)序列加载对象。我应该尝试扩展他们的存档课程还是已经完成了一些事情而我错过了?
我正在寻找一种方法来保存和加载文件中的几种对象,并能够基于某种唯一标识符以任何特定顺序加载它们。我希望将每种类型对象的所有实例都存储在一个特定的不同文件中(例如 class1instances.dat、class2instances.dat 等)。
我查看了 Boost Serialization 但它似乎只能以保存对象的相同(反向)序列加载对象。我应该尝试扩展他们的存档课程还是已经完成了一些事情而我错过了?
每个类只有两个文件,而不是一个:“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
模式来序列化您的对象。例子。
我通过简单地使用JsonCpp解决了这个问题。最后,它是最简单、最灵活的解决方案。