首页 > 代码库 > boost序列化

boost序列化

#include <iostream>#include <boost/serialization/serialization.hpp>#include <boost/archive/binary_iarchive.hpp>#include <boost/archive/binary_oarchive.hpp>#include <boost/archive/text_iarchive.hpp>#include <boost/archive/text_oarchive.hpp>#include <sstream>#pragma warning (disable: 4244)    //解决boost 中binary序列化:“std::streamsize”转换到“size_t”using namespace std;//这里的输入输出,从stringstream到ia或者oa//序列化,文本模式可以用char*然后分配内存,个人认为是流的方式string中是没有/0的然后strcpy(*json, ss.str().c_str());就会出错,下面的解析就有问题//void packetage(char** json, int& len)//不能直接用char* json,因为传递的指针的值会变,需要传递指针的地址//{//    std::stringstream ss;//    //binary_oarchive表示输出到ss中,这也是用stringstream作为中介的,估计也是用stringstream作为存储的,从oa输出到ss中//    boost::archive::text_oarchive oa(ss);//    int a = 1;//    int b = 2;//    oa << a << b;//    *json = new char[ss.str().size() + 1];//    strcpy(*json, ss.str().c_str());//    len = ss.str().size();//}//对于流的方式只能只能传递一个string,然后json = ss.str();void packetage(std::string& json, int& len)//不能直接用char* json,因为传递的指针的值会变,需要传递指针的地址{    std::stringstream ss;    //binary_oarchive表示输出到ss中,这也是用stringstream作为中介的,估计也是用stringstream作为存储的,从oa输出到ss中    boost::archive::binary_oarchive oa(ss);    int a = 1;    int b = 2;    oa << a << b;    json = ss.str();    //strcpy(*json, ss.str().c_str());//个人感觉这里数据就出错了    len = ss.str().size();}//void parse(char* json, int len)//{//    //由于这个是流的方式而不是文本的方式,所以需要长度//    //std::stringstream ss(json);//这种方式不行,因为是流,对于文本模式可以//    std::stringstream ss(json);//    //ss.write(json, len);//需要根据长度手动写入到ss中//    boost::archive::text_iarchive ia(ss);//这个是表示输入,只是从stringstream输入到ia中//    int a;//    int b;//    ia >> a >> b;//}void parse(const char* json, int len){    //由于这个是流的方式而不是文本的方式,所以需要长度    //std::stringstream ss(json);//这种方式不行,因为是流,对于文本模式可以    std::stringstream ss;    ss.write(json, len);//需要根据长度手动写入到ss中    boost::archive::binary_iarchive ia(ss);//这个是表示输入,只是从stringstream输入到ia中    int a;    int b;    ia >> a >> b;}int main(){    //char* json = NULL;    std::string json;    int len = 0;    packetage(json, len);    parse(json.c_str(), len);//c_str()返回首字符的地址    getchar();    return 0;}

 

boost序列化