首先我们需要一个开源库 —— Cereal。
Cereal 的 GitHub 地址
具体怎么配置就不说了,就是一堆头文件 😃 ,拖到项目里就行。
#include <iostream>
#include <Windows.h>
#include <cereal/types/memory.hpp>
#include <cereal/archives/binary.hpp>
#include <cereal/archives/xml.hpp>
#include <cereal/archives/json.hpp>
#include <fstream>
using namespace std;
class A {
public:
int value1;
string value2;
float value3;
double value4;
char value5[20];
A(int v1,string v2,float v3,double v4,string v5) {;
value1 = v1;
value2 = v2;
value3 = v3;
value4 = v4;
strcpy(value5, v5.c_str());
A(){
value1 = 0;
value2 = "";
value3 = 0;
value4 = 0;
strcpy(value5, "");
template<class Archive>
void serialize(Archive& archive)
archive(value1, value2, value3, value4, value5);
int main()
std::ofstream os_xml("my.xml");
cereal::XMLOutputArchive archive_xml_1(os_xml);
A a_xml_1(1, "2", 3, 4, "5");
archive_xml_1(
cereal::make_nvp("a_xml.v1", a_xml_1.value1),
cereal::make_nvp("a_xml.v2", a_xml_1.value2),
cereal::make_nvp("a_xml.v3", a_xml_1.value3),
cereal::make_nvp("a_xml.v4", a_xml_1.value4),
cereal::make_nvp("a_xml.v5", a_xml_1.value5)
std::ifstream is_xml("my.xml");
cereal::XMLInputArchive archive_xml_2(is_xml);
A a_xml_2;
archive_xml_2(a_xml_2.value1, a_xml_2.value2, a_xml_2.value3, a_xml_2.value4, a_xml_2.value5);
cout << "a_xml.value1 = " << a_xml_2.value1 << "\n"
<< "a_xml.value2 = " << a_xml_2.value2 << "\n"
<< "a_xml.value3 = " << a_xml_2.value3 << "\n"
<< "a_xml.value4 = " << a_xml_2.value4 << "\n"
<< "a_xml.value5 = " << a_xml_2.value5 << endl;
std::ofstream os_json("my.json");
cereal::JSONOutputArchive archive_json_1(os_json);
A a_json_1(1, "2", 3, 4, "5");
archive_json_1(
cereal::make_nvp("a_json.v1", a_json_1.value1),
cereal::make_nvp("a_json.v2", a_json_1.value2),
cereal::make_nvp("a_json.v3", a_json_1.value3),
cereal::make_nvp("a_json.v4", a_json_1.value4),
cereal::make_nvp("a_json.v5", a_json_1.value5)
std::ifstream is_json("my.json");
cereal::JSONInputArchive archive_json_2(is_json);
A a_json_2;
archive_json_2(a_json_2.value1, a_json_2.value2, a_json_2.value3, a_json_2.value4, a_json_2.value5);
cout << "a_json.value1 = " << a_json_2.value1 << "\n"
<< "a_json.value2 = " << a_json_2.value2 << "\n"
<< "a_json.value3 = " << a_json_2.value3 << "\n"
<< "a_json.value4 = " << a_json_2.value4 << "\n"
<< "a_json.value5 = " << a_json_2.value5 << endl;
std::ofstream os_bit("my.binary", std::ios::binary);
cereal::BinaryOutputArchive archive_bit_1(os_bit);
A a_bit_1(1, "2", 3, 4, "5");
archive_bit_1(
cereal::make_nvp("a_bit.v1", a_bit_1.value1),
cereal::make_nvp("a_bit.v2", a_bit_1.value2),
cereal::make_nvp("a_bit.v3", a_bit_1.value3),
cereal::make_nvp("a_bit.v4", a_bit_1.value4),
cereal::make_nvp("a_bit.v5", a_bit_1.value5)
std::ifstream is_bit("my.binary", std::ios::binary);
cereal::BinaryInputArchive archive_bit_2(is_bit);
A a_bit_2;
archive_bit_2(a_bit_2.value1, a_bit_2.value2, a_bit_2.value3, a_bit_2.value4, a_bit_2.value5);
cout << "a_bit.value1 = " << a_bit_2.value1 << "\n"
<< "a_bit.value2 = " << a_bit_2.value2 << "\n"
<< "a_bit.value3 = " << a_bit_2.value3 << "\n"
<< "a_bit.value4 = " << a_bit_2.value4 << "\n"
<< "a_bit.value5 = " << a_bit_2.value5 << endl;
getchar();
return 0;
运行结果:

首先我们需要一个开源库 —— Cereal。Cereal 的 GitHub 地址具体怎么配置就不说了,就是一堆头文件 ???? ,拖到项目里就行。// Test_Console_3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <Windows.h>#include <ce...
程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这些过程将会涉及到程序数据转化成能被存储并传输的格式,因此被称为“序列化”(Serialization),而它的逆过程则可被称为“反序列化” (Deserialization)
简单来说,序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它根据流重构对象。这两个过程结合起来,可以轻松地存储和传输数据。例如,可以序列化一个对象,然后使用
序列化就是将内存中运行的程序中的数据存储到中,使其能够持久化存在电脑中,就算程序停止,这些数据也能一直存在。、顾名思义,也就是序列化的反操作,就是将已经存在磁盘文件中的数据读取到程序中继续使用的这么一个操作。
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。我的博客...
序列化基础知识
cereal支持二进制、XML和Json序列化。读写操作是基于C++的std::ostream和std::istream,也就是操作的对象可以是文件、内存、或者标准的输入输出。
double sum1 = 0, sum2 = 0; // 初始化两个部分和
for (int i = 1; i <= n; i++) {
sum1 += i * i; // 计算平方部分和
sum2 += 1.0 / i; // 计算倒数部分和
cout << "sum1=" << sum1 << endl; // 输出平方部分和
cout << "sum2=" << sum2 << endl; // 输出倒数部分和
return 0;