在C++中,有许多轻量级的序列化库可以帮助你处理数据的序列化和反序列化
示例:
#include <cereal/archives/binary.hpp>
#include <fstream>
struct MyData {
int x;
float y;
template<class Archive>
void serialize(Archive &archive) {
archive(x, y);
}
};
int main() {
// 序列化
std::ofstream os("data.bin", std::ios::binary);
cereal::BinaryOutputArchive archive_out(os);
MyData data_out{42, 3.14f};
archive_out(data_out);
// 反序列化
std::ifstream is("data.bin", std::ios::binary);
cereal::BinaryInputArchive archive_in(is);
MyData data_in;
archive_in(data_in);
}
示例:
// schema.fbs
table MyData {
x: int;
y: float;
}
// 编译 schema.fbs 生成 C++ 代码
// flatc --cpp schema.fbs
#include "schema_generated.h"
#include <iostream>
int main() {
// 序列化
flatbuffers::FlatBufferBuilder builder;
auto data_offset = schema::CreateMyData(builder, 42, 3.14f);
builder.Finish(data_offset);
// 反序列化
auto data_in = schema::GetMyData(builder.GetBufferPointer());
std::cout << "x: " << data_in->x() << ", y: " << data_in->y() << std::endl;
}
示例:
#include <msgpack.hpp>
#include <iostream>
#include <sstream>
struct MyData {
int x;
float y;
MSGPACK_DEFINE(x, y);
};
int main() {
// 序列化
MyData data_out{42, 3.14f};
std::stringstream ss;
msgpack::pack(ss, data_out);
// 反序列化
msgpack::unpacked unpacked;
msgpack::unpack(unpacked, ss.str().data(), ss.str().size());
MyData data_in = unpacked.get().as<MyData>();
std::cout << "x: " << data_in.x << ", y: " << data_in.y << std::endl;
}
这些库都是轻量级的,易于集成和使用。你可以根据项目需求选择合适的库。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。