温馨提示×

c++序列化和反序列化怎么运用

c++
小亿
94
2023-11-09 01:04:58
栏目: 编程语言

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;
}

运行上述代码,将会输出反序列化后的学生对象的名称和年龄。

这只是一个简单的示例,实际应用中可能需要更复杂的序列化和反序列化操作,例如处理对象的继承关系、序列化嵌套对象等。

0