2010-10-06 81 views
4

我試圖建立一個持久化模塊,我想在序列化/反序列化我需要對文件進行持久化的類。 Boost序列化可以將多個對象寫入同一個文件嗎?我怎樣才能讀取或循環通過文件中的entrys?如果一個良好的性能是一個條件,Google協議緩衝區可能會對我更好?Boost序列化多個對象

回答

4

如果序列化庫無法序列化多個對象,序列化庫將不會非常有用。如果你閱讀他們的very extensive documentation,你可以找到所有的答案。

+0

是的,我讀過它,但如果你看到文檔,所有的例子都只對同一個文件寫入一個,後來他們閱讀這個條目。但是沒有關於在同一個文件中循環對象的例子,或者在位置X的文件中獲得對象序列化的例子。是嗎? – opernas 2010-10-06 09:55:44

+0

由於庫可以序列化數組和標準容器,通常不需要循環自己。我不認爲你可以從隨機位置讀取文件,序列化庫依次工作,按順序編寫所有對象,然後按相同的順序讀取它們。 – 2010-10-06 10:10:02

0

我正在學習boost,我認爲你可以使用boost序列化作爲日誌文件,並使用你的邏輯繼續添加值。我面臨同樣的問題,如果我沒看錯你的代碼是這樣的:

#include <iostream> 
#include <fstream> 
#include <boost/archive/text_iarchive.hpp> 
#include <boost/archive/text_oarchive.hpp> 

int main() { 
    int two=2; 

    for(int i=0;i<10;i++) { 

     std::ofstream ofs("table.txt"); 
     boost::archive::text_oarchive om(ofs); 
     om << two; 
     two = two+30; 
     std::cout<<"\n"<<two; 
    } 

    return 0; 
} 

這裏當您關閉括號(循環的大括號),序列化文件關閉。您可能會看到只寫在table.txt一個值,如果要存儲多個值,你的代碼應該是這樣的:

#include <iostream> 
#include <fstream> 
#include <boost/archive/text_iarchive.hpp> 
#include <boost/archive/text_oarchive.hpp> 

int main() { 
    int two=2; 

    { 
     std::ofstream ofs("table.txt"); 
     boost::archive::text_oarchive om(ofs); 
     for(int i=0;i<10;i++) { 

      om << two; 
      two = two+30; 
      std::cout<<"\n"<<two; 
     } 
    } 

    return 0; 
} 

在這裏你可以看到,在大括號包圍的boost ::系列化:: text_oarchive僅在我完成邏輯結果的序列化時關閉。