#include <iostream>
#include <sstream>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/utility.hpp>
using namespace std;
class Data
{
friend class boost::serialization::access;
_int64 m_data;
template <class Archive>
void serialize( Archive& ar, const unsigned int version )
{
ar & m_data;
};
public:
Data() : m_data( 0 ) {};
const _int64& getData() const { return m_data; };
void setData( _int64 val ){ m_data = val; }
};
int _tmain(int argc, _TCHAR* argv[])
{
// 序列化對象
ostringstream oss;
boost::archive::binary_oarchive oar( oss );
Data data;
const Data& data_freeze = const_cast<Data&>( data );
data.setData( 1000000000000000000 );
oar << data_freeze;
data.setData( 4000000000000000000 );
oar << data_freeze;
cout << "serialize: len:" << oss.str().size() << "\n data:" << oss.str() << endl;
// 反序列化
istringstream iss( oss.str() );
boost::archive::binary_iarchive iar( iss );
Data data1;
iar >> data1;
cout << "data: " << data1.getData() << endl;
iar >> data1;
cout << "data: " << data1.getData() << endl;
getchar();
return 0;
}
#include <sstream>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/utility.hpp>
using namespace std;
class Data
{
friend class boost::serialization::access;
_int64 m_data;
template <class Archive>
void serialize( Archive& ar, const unsigned int version )
{
ar & m_data;
};
public:
Data() : m_data( 0 ) {};
const _int64& getData() const { return m_data; };
void setData( _int64 val ){ m_data = val; }
};
int _tmain(int argc, _TCHAR* argv[])
{
// 序列化對象
ostringstream oss;
boost::archive::binary_oarchive oar( oss );
Data data;
const Data& data_freeze = const_cast<Data&>( data );
data.setData( 1000000000000000000 );
oar << data_freeze;
data.setData( 4000000000000000000 );
oar << data_freeze;
cout << "serialize: len:" << oss.str().size() << "\n data:" << oss.str() << endl;
// 反序列化
istringstream iss( oss.str() );
boost::archive::binary_iarchive iar( iss );
Data data1;
iar >> data1;
cout << "data: " << data1.getData() << endl;
iar >> data1;
cout << "data: " << data1.getData() << endl;
getchar();
return 0;
}
感覺還不錯, 如果將其加入網絡數據處理部分應該挺好的, 還有待其他方面測試。
google的Protocol Buffer的確很好, 之前同事介紹過沒認真看, 還是感謝下!
http://code.google.com/p/protobuf/