boost序列化

时间:2022-10-21 00:25:50
#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 = ;
int b = ;
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 = ;
packetage(json, len);
parse(json.c_str(), len);//c_str()返回首字符的地址
getchar();
return ;
}