在 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 等)來處理序列化和反序列化。