在Linux中,C++实现序列化有多种方法,以下是一些常用的库和方法:

Boost.Serialization是一个非常强大的库,支持多种数据类型的序列化和反序列化。
首先,你需要安装Boost库。在大多数Linux发行版中,可以使用包管理器安装:
sudo apt-get install libboost-all-dev#include <boost/archive/text_oarchive.hpp>#include <boost/archive/text_iarchive.hpp>#include <boost/serialization/vector.hpp>#include <fstream>#include <iostream>#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::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};// 序列化到文件{std::ofstream ofs("people.txt");boost::archive::text_oarchive oa(ofs);oa << people;}// 从文件反序列化std::vector<Person> loaded_people;{std::ifstream ifs("people.txt");boost::archive::text_iarchive ia(ifs);ia >> loaded_people;}// 打印反序列化后的数据for (const auto& person : loaded_people) {std::cout << person.name << " " << person.age << std::endl;}return 0;}Cereal是一个轻量级的C++序列化库,易于使用且性能良好。
你可以从GitHub上下载Cereal库并手动编译安装:
git clone https://github.com/USCiLab/cereal.gitcd cerealmkdir build && cd buildcmake ..makesudo make install#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::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};// 序列化到文件{std::ofstream ofs("people.json");cereal::JSONOutputArchive oarchive(ofs);oarchive(people);}// 从文件反序列化std::vector<Person> loaded_people;{std::ifstream ifs("people.json");cereal::JSONInputArchive iarchive(ifs);iarchive(loaded_people);}// 打印反序列化后的数据for (const auto& person : loaded_people) {std::cout << person.name << " " << person.age << std::endl;}return 0;}如果你只需要简单的文本或二进制序列化,可以使用标准库中的文件流。
#include <fstream>#include <iostream>#include <vector>#include <string>struct Person {std::string name;int age;};int main() {std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};// 序列化到文件{std::ofstream ofs("people.txt");for (const auto& person : people) {ofs << person.name << "," << person.age << std::endl;}}// 从文件反序列化std::vector<Person> loaded_people;{std::ifstream ifs("people.txt");std::string line;while (std::getline(ifs, line)) {size_t pos = line.find(',');Person person;person.name = line.substr(0, pos);person.age = std::stoi(line.substr(pos + 1));loaded_people.push_back(person);}}// 打印反序列化后的数据for (const auto& person : loaded_people) {std::cout << person.name << " " << person.age << std::endl;}return 0;}#include <fstream>#include <iostream>#include <vector>#include <string>struct Person {std::string name;int age;};int main() {std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};// 序列化到文件{std::ofstream ofs("people.bin", std::ios::binary);for (const auto& person : people) {size_t name_size = person.name.size();ofs.write(reinterpret_cast<const char*>(&name_size), sizeof(name_size));ofs.write(person.name.c_str(), name_size);ofs.write(reinterpret_cast<const char*>(&person.age), sizeof(person.age));}}// 从文件反序列化std::vector<Person> loaded_people;{std::ifstream ifs("people.bin", std::ios::binary);while (ifs.good()) {Person person;size_t name_size;ifs.read(reinterpret_cast<char*>(&name_size), sizeof(name_size));person.name.resize(name_size);ifs.read(&person.name[0], name_size);ifs.read(reinterpret_cast<char*>(&person.age), sizeof(person.age));loaded_people.push_back(person);}}// 打印反序列化后的数据for (const auto& person : loaded_people) {std::cout << person.name << " " << person.age << std::endl;}return 0;}这些方法各有优缺点,选择哪种方法取决于你的具体需求,例如性能、易用性和兼容性。
DeepSeek多模态怎么样及保姆级配置教程(codex、claude)实用指南
WSL2+Docker+Ollama本地部署大模型思路和实践指南(Qwen1.8b)实用指南
DeepSeek Harness热门插件盘点:10个实用插件,覆盖多Agent、上下文和多模态实用指南
grep文本搜索与正则表达式完整代码示例实用指南
AI漫剧伪装直男1‑24集无雾版夸克网盘资源免费分享
AI漫剧玉僧入尘1-68集无雾无删版夸克网盘资源免费分享