关于序列化:把某个对象序列化成字节流

摘要:
一个常见的操作是将本地数据块转换为字符流并将其发送到远程端。远程端将字符串流恢复到数据库。如果有以下CObject类的示例。编写两个函数,将CObject中的成员变量转换为字符流。

在网络编程中。一个常常的操作是将本地的数据块转换成字符流并将其发送到远端。远端将这个字符串流恢复成数据库。如果有例如以下一个类CObject。编写两个函数,分别将CObject中的成员变量转换为一个字符流(convert2Stream()函数)。并将字符流的数据又一次恢复到一个CObject对象中(convert2Object()函数):

char* convert2Stream(const CObject* vObject);

CObject* convert2Object(const char* vStream);

class CObject

{

private:

int m_NumSample;

std::vector<int> m_Data;

bool m_IsDirty;

}

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <boost/assign/list_of.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/access.hpp>
#include <boost/serialization/vector.hpp>  

class CObject
{
public:
	CObject() {}
	~CObject() {}

	void printMember() const
	{
		std::cout << "Number " << m_NumSample << "
";
		std::cout << "vector: ";
		for (int i=0; i<m_Data.size(); ++i)
		{
			std::cout << m_Data[i] << " ";
		}std::cout << std::endl;
		std::cout << "bool " << m_IsDirty << std::endl;
	}

	void setValue(int vNumber, const std::vector<int>& vData, bool vB)
	{
		m_NumSample = vNumber;
		m_Data = vData;
		m_IsDirty = vB;
	}

private:
	friend boost::serialization::access;
	template<typename Archive>
	void serialize(Archive& ar, const unsigned int)
	{
		ar & m_NumSample;
		ar & m_Data;
		ar & m_IsDirty;
	}
private:
	int m_NumSample;
	std::vector<int> m_Data;
	bool m_IsDirty;
};

//*********************************************************************************
//FUNCTION:
char* convert2Stream(const CObject* vObject)
{
	//没有推断vObject的合法性
	std::ostringstream OutStream;
	boost::archive::text_oarchive OArchive(OutStream);
	OArchive << vObject;
	std::string TempString = OutStream.str();
	char *pBuffer = new char[TempString.size()+1];
	memcpy(pBuffer, TempString.c_str(), TempString.size());
	pBuffer[TempString.size()] = '

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JS实现点击图片放大、关闭效果Gin框架系列03:换个姿势理解中间件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

asp.net中序列化和反序列化json的两种常用方式

使用System.Web.Script.Serialization.JavaScriptSerializer类       JavaScriptSerializer类为.net类库自带,.net3.5及以后版本都可以使用,该类位于System.Web.Extensions.dll中,如需使用该类,必须添加引用。      (1) 序列化 p...

go学习-结构体与JSON序列化

结构体与JSON序列化 JSON数据与结构体之间相互转换 基本的序列化:json.Marshal()(序列化:结构体-->JSON格式的字符串)与json.Unmarshal(反序列化:JSON格式的字符串-->结构体) package main import ("fmt" "encoding/json" ) //Student 学生 ty...

Android游戏开发实践(1)之NDK与JNI开发01

Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码“交互”的开发工具集。而Android是运行在Dalvik虚拟机之上,支持通过JNI的方式调用本地C/C++动态链接库。C/C++有着较高的性能和移植性,通过这种...

java中为什么要实现序列化,什么时候实现序列化?

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implement...

biztalk中使用.net class类型的消息(一) 相关知识介绍【转】

一.概述 二.消息的结构 三.消息的类型 1.平面文件 2.Xml文档 3..net class 4.二进制数据 四..net class类型的序列化 五..net class类型的消息 1.类要设置为可序列化 2.类中只包含公共属性和字段 3.设置名称空间 4.设置可分辨字段和升级属性 4.1.设置可分辨字段 4.2.设置升级属性 5.一个.net cl...

.NET 6下,MySQL第三方ORM性能测试,EFCore、SqlSugar、Zack、Z.EntityFramework

ORM说明: EFCore 6.0.0(Microsoft.EntityFrameworkCore、Pomelo.EntityFrameworkCore.MySql)(微软原生,性能有惊喜,请看下文) SqlSugarCore 5.0.4.7(国内主流第三方ORM) Z.EntityFramework.Extensions.EFCore 6.13...