boost serialization in text and binary files



  • Hallo zusammen,

    ich hab ein Problem, und komm leider net weiter mit dem boost serialization von objekten. Ich hab code geschrieben, dass mir die Objekten in XML und TXT files serializiert und das funktioniert reibungslos, sobald ich aber in binary serializieren will dann bekomme ich staendig exceptions beim DeSerializierung.

    Hier das Code fuer Beispiel:

    class GeometryBase
    {
    friend class boost::serialization::access;
    public:
      vector<GeometryData> geoData;
      private:
    	template<class archive>
    	void save(archive& ar, const unsigned int version) const 
    	{	
    		using boost::serialization::make_nvp;
    		ar & make_nvp("GeometryData", geoData);
    
    	};
    
    	template<class archive>
    	void load(archive& ar, const unsigned int version)
    	{
    		using boost::serialization::make_nvp;
    		ar & make_nvp("GeometryData", geoData);
    	};
    };
    

    Diese Klasse wird dann mit info befuellt:

    GeometryBase geometry;
    
    boost::shared_ptr<GeometryData> plane = boost::dynamic_pointer_cast<GeometryData>( GeometryServer::getInstance()->getData(plane_name) );
    
    geometry.geoData.push_back(*plane);	
    
    .......
    
    serialize<GeometryBase>(geometry, "C:\\test"); 
    GeometryBase deserGeometry;
    deSerialize<GeometryBase>(geometry, "C:\\test");
    

    Das code fuer se/deserializierung sieht so aus:

    template<class T>
    void serialize(T& geometry, std::string file_name, int file_format = 0 )
    {
    std::ofstream ofs(file_name.c_str());
    assert(ofs.good());

    switch(file_format)
    {
    case 0:
    {
    boost::archive::xml_oarchive xml_oa(ofs);
    xml_oa << BOOST_SERIALIZATION_NVP(geometry);
    break;
    }
    case 1:
    {
    boost::archive::text_oarchive text_oa(ofs);
    text_oa << BOOST_SERIALIZATION_NVP(geometry);
    break;
    }
    case 2:
    {
    boost::archive::binary_oarchive bin_oa(ofs);
    bin_oa << BOOST_SERIALIZATION_NVP(geometry);
    break;
    }
    }
    ofs.close();
    }
    template<class T>
    void deSerialize(T& geometry, std::string file_name, int file_format = 0 )
    {
    std::ifstream ifs(file_name.c_str());
    assert(ifs.good());

    switch(file_format)
    {
    case 0:
    {
    boost::archive::xml_iarchive ia(ifs);
    ia >> BOOST_SERIALIZATION_NVP(geometry);
    break;
    }
    case 1:
    {
    boost::archive::text_iarchive ia(ifs);
    ia >> BOOST_SERIALIZATION_NVP(geometry);
    break;
    }
    case 2:
    {
    boost::archive::binary_iarchive ia(ifs);
    ia >> BOOST_SERIALIZATION_NVP(geometry);
    break;
    }
    }
    ifs.close();
    }

    Kann mir jemand weiter helfen?


Anmelden zum Antworten