C++中的序列化和反序列化可以用于將對象的狀態以字節流的形式保存到文件或數據庫中,然后在需要時重新讀取并恢復對象的狀態。
以下是一個示例,演示了如何在C++中使用序列化和反序列化:
#include <iostream>
#include <fstream>
#include <sstream>
class Student {
private:
std::string name;
int age;
public:
Student(const std::string& name, int age) : name(name), age(age) {}
std::string getName() const {
return name;
}
int getAge() const {
return age;
}
// 序列化對象
std::string serialize() const {
std::stringstream ss;
ss << name << "," << age;
return ss.str();
}
// 反序列化對象
static Student deserialize(const std::string& data) {
std::stringstream ss(data);
std::string name;
int age;
std::getline(ss, name, ',');
ss >> age;
return Student(name, age);
}
};
int main() {
// 創建一個學生對象
Student student("Alice", 20);
// 序列化對象并保存到文件
std::string serializedData = student.serialize();
std::ofstream file("student.txt");
file << serializedData;
file.close();
// 從文件中讀取數據并反序列化為對象
std::ifstream readFile("student.txt");
std::stringstream buffer;
buffer << readFile.rdbuf();
std::string fileData = buffer.str();
readFile.close();
Student deserializedStudent = Student::deserialize(fileData);
std::cout << "Name: " << deserializedStudent.getName() << std::endl;
std::cout << "Age: " << deserializedStudent.getAge() << std::endl;
return 0;
}
運行上述代碼,將會輸出反序列化后的學生對象的名稱和年齡。
這只是一個簡單的示例,實際應用中可能需要更復雜的序列化和反序列化操作,例如處理對象的繼承關系、序列化嵌套對象等。