嗨,大家好!我是橙子。今天咱们来探索超棒的 Cereal 库,它能轻松搞定 C++数据的序列化与反序列化,就像神奇的魔法,把数据变成能存储和传输的格式,然后又能变回来,超有趣哦!快来开启学习之旅。
一、Cereal 基础使用Cereal 是个超好用的 C++模块。首先得包含它的头文件哦,这就像是给我们的代码打开一扇通往序列化世界的门。
#include <iostream>
#include <fstream>
#include <cereal/archives/binary.hpp>// 定义一个简单的结构体
struct MyData {int num;std::string str;// 这是 Cereal 序列化的函数模板template<class Archive>void serialize(Archive & ar) {ar(num, str); // 就像把数据打包进一个盒子}
};
小贴士:这里的 serialize
函数是关键,它告诉 Cereal 如何处理结构体里的数据哦。
二、数据序列化咱们可以把数据序列化成文件,就像把东西整理好放进仓库。
int main() {MyData data = {42, "Hello, Cereal!"};// 创建一个二进制输出文件流std::ofstream os("data.bin", std::ios::binary);// 用 Cereal 的二进制归档器来序列化数据cereal::BinaryArchive archive(os);archive(data); // 把数据存进文件return 0;
}
运行后,就会生成一个 data.bin
文件,里面存储了我们的数据。
三、数据反序列化从文件里把数据拿出来还原,就像从仓库里取出东西。
int main() {MyData recoveredData;// 创建二进制输入文件流std::ifstream is("data.bin", std::ios::binary);cereal::BinaryArchive archiveIn(is);archiveIn(recoveredData); // 把数据从文件读取出来std::cout << "Recovered num: " << recoveredData.num << std::endl;std::cout << "Recovered string: " << recoveredData.str << std::endl;return 0;
}
运行结果会显示出之前序列化的数据。
四、序列化不同数据类型Cereal 还能处理很多数据类型,比如数组、容器等。就像一个万能的收纳盒。
#include <vector>
#include <cereal/archives/json.hpp>// 定义一个包含向量的结构体
struct ComplexData {std::vector<int> vec;template<class Archive>void serialize(Archive & ar) {ar(vec);}
};int main() {ComplexData complex;complex.vec = {1, 2, 3, 4, 5};// 序列化成 JSON 格式的文件std::ofstream os("complex.json");cereal::JSONArchive archive(os);archive(complex);return 0;
}
小贴士:注意选择合适的归档器,比如这里用的是 JSONArchive
。
今天的 C++学习之旅就到这里啦!记得动手敲代码。祝大家学习愉快,C++学习节节高!