C++ のシリアライズとデシリアライズの活用法を教えてください
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;
}
上記のコードを実行すると、シリアライズされた学生オブジェクトの名前と年齢が出力されます。
本例は単なる例であり、実際には、オブジェクトの継承関係の処理やネストされたオブジェクトのシリアライズなど、シリアライズとデシリアライズの作業はさらに複雑になる可能性があります。