0

いくつかの種類のオブジェクトをファイルに保存してロードし、ある種の一意の識別子に基づいて特定の順序でそれらをロードできる方法を探しています。各タイプのオブジェクトのすべてのインスタンスを特定の異なるファイル(たとえば、class1instances.dat、class2instances.datなど)に保存したいと思います。

Boost Serializationを見てきましたが、オブジェクトを保存したのと同じ(逆の)順序でしかオブジェクトをロードできないように見えます。彼らのArchiveクラスを拡張しようとすべきですか、それともすでに何かが行われていて、それを見逃したのですか?

4

2 に答える 2

1

「class1instances.dat」と「class1indeces.dat」の1つではなく、クラスごとに2つのファイルを用意するだけです。

最初のクラスは、オブジェクトの連続ファイルです。2番目のファイルは、最初のファイルのオブジェクトのインデックスとして使用されます。これには、最初のファイル内のオブジェクトの位置が含まれています。たとえば、class1indeces.datは次のようになります。

0
1235
12343
43455
899432

つまり、最初のオブジェクトはファイル「class1instances.dat」の位置0にあります。2番目のオブジェクトは位置1235などにあります。次に、ストリームシーク機能を使用して読み取りを開始します。

別のインデックスメソッドはkey-valueです。オブジェクトごとに一意のIDを設定し、各オブジェクトIDとそれに対応するインデックスを書き込むことができます。例えば:

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

たとえば、ID = 320のオブジェクトを取得するには、ファイル内でID320を線形検索します。それを見つけたら、対応する位置を使用して、次の位置までオブジェクトの読み取りを開始します。

ストリームbinモードを使用して、オブジェクトをシリアル化することもできます。

于 2012-10-27T10:13:39.367 に答える
0

JsonCppを使用するだけでこれを解決しました。結局、それは最も簡単で最も柔軟な解決策でした。

于 2012-11-28T15:21:40.600 に答える