2012-10-27 66 views
0

我正在尋找一種方法來保存和加載文件中的多種對象,並且可以根據某種唯一標識符以任意特定順序加載它們。我希望每種類型對象的所有實例都存儲在特定的不同文件中(例如class1instances.dat,class2instances.dat等)。保存對象並按任意順序加載

我已經看過Boost Serialization,但它看起來好像它只能加載對象在它保存它們的相同(反向)順序中。我應該嘗試擴展他們的檔案課,還是有一些已經完成的課程,我錯過了?

+0

這聽起來更像是一個數據庫會做什麼。 –

+0

我認爲有時你必須編寫自己的代碼。我會建議某種索引文件放在你的.dat文件中。索引文件將具有唯一標識符和數據文件中每個保存對象的位置。 – john

+0

@BoPersson嗯,我可以將東西保存在同一個文件中,然後將它們全部加載到一個矢量中,然後選擇我想要的那個,但它感覺不對。這樣一個小小的修改是什麼?我不必執行復雜的操作,只需使用特定的ID一次獲取一個項目。 – Svalorzen

回答

0

我通過簡單地使用JsonCpp解決了這個問題。最後它是最簡單和最靈活的解決方案。

1

只要有文件爲每個類,而不是一個「class1instances.dat」和「class1indeces.dat`

第一類是你的對象,另一個後的sequentional文件中。第二個文件是作爲指數中的第一個文件你的對象它包含的第一個文件對象的位置。例如,class1indeces.dat會是什麼樣子:。

0 
1235 
12343 
43455 
899432 

意味着,第一個目的是在文件「class1instances.dat」的位置0處,第二個對象位於1235等位置,然後你就可以se流查找功能開始閱讀。

另一種索引方法是key-value。您可以爲每個對象設置一個唯一的ID並寫入每個對象ID及其相應的索引。例如:

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

例如,要檢索ID爲320的對象,只需在文件中對ID 320進行線性搜索即可。當你找到它時,用它的相應位置開始讀取它的對象直到的下一個位置。

您還可以使用流模式bin序列化您的對象。 Example

+0

謝謝,但我正在尋找已經完成的事情。我知道如何自己做,我只是希望這是一個普遍的問題,並且會有一個圖書館。 – Svalorzen

+0

@Svalorzen請檢查此http://www.ocoudert.com/blog/2011/07/09/a-practical-guide-to-c-serialization/ – 2012-10-27 16:05:35

+0

這是一個教程boost :: serialize ..所以?如前所述,它不支持加載特定元素。 – Svalorzen