可视化序列化c++类
visual Serializing a c++ class
可能重复:
如何在c++中序列化?
我有一个类
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以填充回成员。
您可以看看Boost.Serialization。如果您只需要基于iostreams的简单文本序列化,则可能需要重载流提取运算符。对于序列化,这可能看起来像这样:
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;
你可以在这里找到一个小的工作示例。
重载这些运算符的优点是,例如,可以将std::copy
与std::ostream_iterator
一起使用,以便在一个语句中序列化整个Person集合。
您可以使用以下包装器将任何数据类型转换为字符流:
template<class TYPE>
string ToChar (const TYPE& value)
{
stringstream ss;
ss << value;
return ss.str();
}
您可以按照自己想要的方式使用string
对象;如使用c_str()
转换为char流或复制到数组等。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 提升序列化 1:73 的向后兼容性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 如何反序列化数组?
- 如何使用提升序列化?
- 序列化多晶型接口
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?