您的位置:首页 > 其它

boost序列化

2014-09-15 00:14 176 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: