Stimuler La Sérialisation Binaire Problème

J'ai un problème d'utilisation de boost de sérialisation à l'aide de binaire archives. Il fonctionne lorsque vous utilisez un fichier de flux, mais je veux le ranger dans ma variable locale et, finalement, sauver/charger/à partir de berkeley db.
Lors de l'exécution du programme, j'obtiens un boost::archive::archive_exception: "stream erreur" lors de l'instanciation de la binary_iarchive.

#include <sys/time.h>
#include <string>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <fstream>
#include <sstream>

namespace boost {
namespace serialization {

template<class Archive>
void serialize(Archive & ar, timeval & t, const unsigned int version)
{
    ar & t.tv_sec;
    ar & t.tv_usec;
}

}//namespace serialization
}//namespace boost


int main(int, char**)
{
    timeval t1;
    gettimeofday(&t1, NULL);
    char buf[256];

    std::stringstream os(std::ios_base::binary| std::ios_base::out| std::ios_base::in);
    {
        boost::archive::binary_oarchive oa(os, boost::archive::no_header);
        oa << t1;
    }

    memcpy(buf, os.str().data(), os.str().length());
    if(memcmp(buf, os.str().data(), os.str().length()) != 0)
        printf("memcpy error\n");

    timeval t2;
    {
        std::stringstream is(buf, std::ios_base::binary| std::ios_base::out| std::ios_base::in);

        boost::archive::binary_iarchive ia(is, boost::archive::no_header);
        ia >> t2;
    }

    printf("Old(%d.%d) vs New(%d.%d)\n", t1.tv_sec, t1.tv_usec, t2.tv_sec, t2.tv_usec);

    return 0;
}

Il fonctionne au moment de l'initialisation est avec os.str(), donc je suppose que ma façon de copier les données dans ma mémoire tampon ou est est faux.

OriginalL'auteur user364688 | 2010-06-11