2011-05-16 74 views
5

當我試圖通過文本存檔反序列化一些以前用升級版本序列化的數據(1.46到serialize和1.38到反序列化)時,Iv'e得到了這個異常......是有一種方法降級(在代碼中)的序列化?像「set_library_version」的東西?謝謝...Boost序列化:存檔「不支持的版本」異常

回答

4

請參閱Error read binary archive, created by old boost version郵件歸檔關於序列化錯誤。

它說,下面的代碼做這項工作

void load_override(version_type & t, int version){ 
     library_version_type lvt = this->get_library_version(); 
     if(boost::archive::library_version_type(7) < lvt){ 
      this->detail_common_iarchive::load_override(t, version); 
     } 
     else 
     if(boost::archive::library_version_type(6) < lvt){ 
      uint_least16_t x=0; 
      * this->This() >> x; 
      t = boost::archive::version_type(x); 
     } 
     else 
     if(boost::archive::library_version_type(3) == lvt || boost::archive::library_version_type(5) == lvt){ 
#pragma message("CTMS fix for serialization bug (lack of backwards compatability) introduced by boost 1.45.") 
      // upto 255 versions 
      unsigned char x=0; 
      * this->This() >> x; 
      t = version_type(x); 
     } 
     else{ 
      unsigned int x=0; 
      * this->This() >> x; 
      t = boost::archive::version_type(x); 
     } 
    } 
+0

首先,感謝您的回覆......但實際上我不使用加載/保存功能,而是叫連載獨特的功能.. 。就像boost序列化的例子...我該怎麼辦? – marco 2011-05-16 13:02:28

+0

鏈接說到這一點。它說向後兼容性被破壞「在1.44之前,歸檔版本被寫爲」一個字節「,從1.44歸檔版本類型開始,從'version_type'變爲'library_version_type',預計會被讀爲兩個字節。仔細鏈接並使用我粘貼的代碼重新編譯。我認爲這是唯一的解決方案。 – 2011-05-16 13:29:24