Сериализация - это процесс преобразования объектов или структур данных в последовательность байт для:
Десериализация - обратный процесс восстановления объекта из байтового потока.
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class MyClass {
int x;
std::string s;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & x;
ar & s;
}
};
// Сериализация
std::ofstream ofs("data.txt");
boost::archive::text_oarchive oa(ofs);
oa << myObj;
Плюсы:
Минусы:
// Определение в .proto файле
message Person {
required string name = 1;
optional int32 id = 2;
}
// Использование в C++
Person person;
person.set_name("John");
person.set_id(123);
// Сериализация
std::string data = person.SerializeAsString();
Плюсы:
Минусы:
#include <nlohmann/json.hpp>
struct Person {
std::string name;
int age;
};
// Сериализация в JSON
Person p {"Alice", 30};
nlohmann::json j = p; // Автоматическое преобразование
std::string serialized = j.dump();
Плюсы:
Минусы:
// Схема
table Monster {
name:string;
hp:int;
}
// Использование
flatbuffers::FlatBufferBuilder builder;
auto name = builder.CreateString("Orc");
auto monster = CreateMonster(builder, name, 100);
builder.Finish(monster);
// Готовый буфер доступен сразу:
uint8_t *buf = builder.GetBufferPointer();
int size = builder.GetSize();
Плюсы:
Минусы:
Формат данных:
Производительность:
Совместимость:
Сериализация - критически важная техника для современных C++ приложений. Выбор инструмента зависит от:
Для старта рекомендуется:
Главное правило - избегайте самописных решений, когда есть проверенные библиотеки.