温馨提示×

C++在Ubuntu上如何实现序列化

小樊
33
2025-12-01 09:07:08
栏目: 编程语言

在Ubuntu上使用C++实现序列化,你可以选择多种库,比如Boost.Serialization、cereal、或者自己实现一个简单的序列化机制。下面我将分别介绍如何使用Boost.Serialization和cereal来实现序列化。

使用Boost.Serialization

Boost.Serialization是一个功能强大的库,它允许你轻松地序列化和反序列化C++对象。

  1. 安装Boost库: 打开终端并运行以下命令来安装Boost库:

    sudo apt-get update
    sudo apt-get install libboost-all-dev
    
  2. 编写代码: 创建一个C++文件,比如serialize.cpp,并编写以下代码:

    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <boost/serialization/vector.hpp>
    #include <iostream>
    #include <fstream>
    #include <vector>
    
    class Person {
    public:
        std::string name;
        int age;
    
        template<class Archive>
        void serialize(Archive &ar, const unsigned int version) {
            ar & name;
            ar & age;
        }
    };
    
    int main() {
        // 序列化
        {
            std::ofstream ofs("person.txt");
            boost::archive::text_oarchive oa(ofs);
            Person p = {"Alice", 30};
            oa << p;
        }
    
        // 反序列化
        {
            std::ifstream ifs("person.txt");
            boost::archive::text_iarchive ia(ifs);
            Person p;
            ia >> p;
            std::cout << "Name: " << p.name << ", Age: " << p.age << std::endl;
        }
    
        return 0;
    }
    
  3. 编译代码: 使用g++编译你的代码,并链接Boost.Serialization库:

    g++ serialize.cpp -o serialize -lboost_serialization
    
  4. 运行程序: 运行编译后的程序:

    ./serialize
    

使用cereal

cereal是一个轻量级的C++11序列化库,它易于使用且性能良好。

  1. 安装cereal: 你可以从GitHub上下载cereal库,并按照README中的说明进行安装。或者使用包管理器安装:

    sudo apt-get install libboost-all-dev
    git clone https://github.com/USCiLab/cereal.git
    cd cereal
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    
  2. 编写代码: 创建一个C++文件,比如serialize_cereal.cpp,并编写以下代码:

    #include <cereal/archives/json.hpp>
    #include <cereal/types/vector.hpp>
    #include <fstream>
    #include <iostream>
    #include <vector>
    
    class Person {
    public:
        std::string name;
        int age;
    
        template<class Archive>
        void serialize(Archive &archive) {
            archive(name, age);
        }
    };
    
    int main() {
        // 序列化
        {
            std::ofstream ofs("person.json");
            cereal::JSONOutputArchive oarchive(ofs);
            Person p = {"Alice", 30};
            oarchive(p);
        }
    
        // 反序列化
        {
            std::ifstream ifs("person.json");
            cereal::JSONInputArchive iarchive(ifs);
            Person p;
            iarchive(p);
            std::cout << "Name: " << p.name << ", Age: " << p.age << std::endl;
        }
    
        return 0;
    }
    
  3. 编译代码: 使用g++编译你的代码,并链接cereal库:

    g++ serialize_cereal.cpp -o serialize_cereal -lcereal
    
  4. 运行程序: 运行编译后的程序:

    ./serialize_cereal
    

以上就是在Ubuntu上使用C++实现序列化的两种方法。你可以根据自己的需求选择合适的库。

0