zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    oracle过期备份未删除导致磁盘撑爆
    数据文件、监听日志、告警日志、redo日志、归档日志的迁移
    linux软件卸载命令
    Nginx版本平滑升级方案
    rsync 服务搭建
    在node节点部署kubectl管理k8s集群
    源码编译安装nginx及设置开机启动项
    K8S日常运维中关于“ImagePullBackOff”报错的处理思路分析
    查看所有日志命令:journalctl
    Docker编排工具Docker Compose的使用
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3972025.html
Copyright © 2011-2022 走看看