Boost序列化之一

来源:互联网 发布:java sql insert 编辑:程序博客网 时间:2024/05/22 13:07

本来想自己实现一个简单的序列化以临时解决项目,然左思右想,自己实现一来时间不够充裕,二来稳定性、扩展性以及可移植性不是那么好把握,最终还是选择了一个开源库——boost。

boost中的串行化使用简单,易于扩展,如下例:



#include <boost/serialization/vector.hpp>#include <boost/archive/text_iarchive.hpp>#include <boost/archive/text_oarchive.hpp>#include <boost/archive/binary_iarchive.hpp>#include <boost/archive/binary_oarchive.hpp>#include <string>#include <iostream>#include <fstream>using namespace std;class CSerialize{private:friend class boost::serialization::access;//数据成员int m_nNum1;double m_dNum2;std::string m_strInfo;template<class Archive>void serialize( Archive & ar, const unsigned int file_version ){ar & m_nNum1;ar & m_dNum2;ar & m_strInfo;}public:CSerialize(int _num1, double _num2, string& _strInfo) : m_nNum1(_num1), m_dNum2(_num2), m_strInfo(_strInfo){}CSerialize(){}~CSerialize(){};void print(){cout << m_nNum1 << " " << m_dNum2 << endl;cout << m_strInfo << endl;}static void saveData(CSerialize& data, string fileName){ofstream fout(fileName);boost::archive::binary_oarchive ar_out(fout);ar_out << data;}static void loadData(CSerialize& data, string fileName){ifstream fin(fileName);boost::archive::binary_iarchive ar_in(fin);ar_in >> data;}ofstream& operator<<(ofstream& os);ifstream& operator>>(ifstream& is);protected:private:};ofstream& CSerialize::operator<<(ofstream& os){os << m_nNum1 << m_dNum2 << m_strInfo;return os;}ifstream& CSerialize::operator>>(ifstream& is){is >> m_nNum1 >> m_dNum2 >> m_strInfo;return is;}int main(int argc, char *argv[]){ofstream fout("test.vipp");boost::archive::binary_oarchive ar_out(fout);CSerialize obj1(1, 2.5, string("Oh Oh ha ha tttt"));ar_out << obj1;fout.close();ifstream fin("test.vipp");boost::archive::binary_iarchive ar_in(fin);CSerialize new_obj;ar_in >> new_obj;fin.close();new_obj.print();CSerialize test_obj;CSerialize::loadData(test_obj, "test.vipp");test_obj.print();getchar();return 0;}
原创粉丝点击