我有一个班级
Class Person
{
int age;
char *name;
char* Serialize()
{
//Need to convert age and name to char* eg:21Jeeva
}
void DeSerialize(char *data)
{
//Need to populate age and name from the data
}
};
在C#中我们可以使用MemoryStream,BinrayWriter / BinaryReader来实现这一点。在c ++的某个地方,我发现我们可以使用iostream来实现它。但无法得到一个恰当的例子。
代码的目的是在调用serialize之后我将通过套接字发送数据并在接收结束时调用DeSerialize来填充成员。
答案 0 :(得分:3)
您可以查看Boost.Serialization。如果您只需要基于iostream的简单文本序列化,则可能需要重载流提取运算符。对于序列化,这可能如下所示:
std::ostream & operator<<(std::ostream & stream, const Person & person) {
stream << person.age << " " << person.name;
return stream;
}
你必须使这个功能成为Person
的朋友,才能发挥作用。
对于反序列化,您可以使用:
std::istream & operator>>(std::istream & stream, Person & person) {
stream >> person.age >> person.name;
return stream;
}
使用这些,您可以执行以下操作:
Person fred;
fred.name = "Fred";
fred.age = 24;
std::stringstream buffer;
buffer << fred << std::endl;
Person fred_copy;
buffer >> fred;
您可以找到一个小的工作示例here。
重载这些运算符的优点是,您可以使用std::copy
和std::ostream_iterator
在一个语句中序列化整个人员集合。
答案 1 :(得分:0)
您可以使用以下包装器将任何数据类型转换为字符流:
template<class TYPE>
string ToChar (const TYPE& value)
{
stringstream ss;
ss << value;
return ss.str();
}
您可以按照自己的方式使用string
对象;比如使用c_str()
转换为char流或复制到数组等等。