在 C++ 中,为了实现自定义类型的值序列化,你需要提供一个将对象转换为字节流(序列化)以及从字节流还原为对象(反序列化)的方法
首先,创建一个名为 Person
的简单类:
#include<iostream>
#include<string>
class Person {
public:
std::string name;
int age;
Person() : name(""), age(0) {}
Person(std::string name, int age) : name(name), age(age) {}
};
接下来,为 Person
类添加序列化和反序列化方法。这里我们使用 C++ 的字符串流(std::stringstream
)作为示例:
#include <sstream>
class Person {
// ... 其他代码 ...
// 序列化方法
std::string serialize() const {
std::stringstream ss;
ss.write(reinterpret_cast<const char*>(&age), sizeof(age));
std::string nameSize = std::to_string(name.size());
ss.write(nameSize.c_str(), nameSize.size());
ss.write(name.c_str(), name.size());
return ss.str();
}
// 反序列化方法
static Person deserialize(const std::string& data) {
std::stringstream ss(data);
int age;
ss.read(reinterpret_cast<char*>(&age), sizeof(age));
std::string nameSizeStr;
for (char c; ss.get(c); nameSizeStr += c);
size_t nameSize = std::stoi(nameSizeStr);
std::string name;
for (size_t i = 0; i< nameSize; ++i) {
char c;
ss.get(c);
name += c;
}
return Person(name, age);
}
};
现在,你可以使用 serialize()
方法将 Person
对象转换为字节流,并使用 deserialize()
方法将字节流还原为 Person
对象:
int main() {
Person person("Alice", 30);
std::string serializedData = person.serialize();
Person deserializedPerson = Person::deserialize(serializedData);
std::cout << "Name: "<< deserializedPerson.name << ", Age: "<< deserializedPerson.age<< std::endl;
return 0;
}
请注意,此示例仅适用于简单的数据类型,如整数和字符串。对于更复杂的数据结构,你可能需要使用第三方库(如 Boost.Serialization、cereal 等)来处理序列化和反序列化。