Utilizo Boost.Serialization para serializar un std :: map. El código es el siguiente¿Boost.Serialization se serializa de manera diferente en diferentes plataformas?
void Dictionary::serialize(std::string & buffer)
{
try {
std::stringstream ss;
boost::archive::binary_oarchive archive(ss);
archive << dict_;
buffer = ss.str();
} catch (const std::exception & ex) {
throw DictionaryException(ex.what());
}
}
void Dictionary::deserialize(const char * const data, int length)
{
try {
namespace io = boost::iostreams;
io::array_source source(data, length);
io::stream<io::array_source> in(source);
boost::archive::binary_iarchive archive(in);
archive >> dict_;
} catch (const std::exception & ex) {
throw DictionaryException(ex.what());
}
}
I compilado y probado el código en un Mac Snow Leopard y en Ubuntu Lucid 10.04. Hay Boost 1.40 en ambos sistemas. En la Mac, construí el código yo mismo. En el cuadro de Ubuntu obtuve los binarios a través de aptitude.
Problema: Cuando serializo el mapa en la Mac no puedo deserializarlo en la caja de Ubuntu. Obtengo una excepción de firma inválida si lo intento.
Tenga en cuenta que esto podría tener un efecto muy significativo en el rendimiento de la aplicación. –