阅读量:0
在 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 等)来处理序列化和反序列化。