首页 / 资讯中心 / 文章详情

C++序列化与反序列化实战:从文本到二进制,面试必考的数据持久化技术全解析

C++序列化与反序列化实战:从文本到二进制,面试必考的数据持久化技术全解析 ★ FEATURED ARTICLE
C++序列化与反序列化实战:从文本到二进制,面试必考的数据持久化技术全解析引言序列化与反序列化是C++开发中的核心技能,也是大厂面试的高频考点。无论是网络传输、数据存储还是进程间通信,都离不开序列化技术。本文将系统讲解C++序列化的各种方案,帮你掌握从文本到二进制的全面序列化技术。一、序列化基础概念1.1 什么是序列化概念说明示例序列化将对象状态转换为可存储/传输的格式对象 → JSON字符串反序列化将存储/传输的数据还原为对象JSON字符串 → 对象持久化将数据保存到存储介质写入文件/数据库1.2 序列化的应用场景1. 网络通信:RPC框架中的消息编解码 2. 数据存储:游戏存档、配置文件 3. 进程通信:共享内存中的数据交换 4. 缓存系统:Redis等缓存的数据格式 5. 分布式系统:节点间的数据同步二、文本格式序列化2.1 JSON序列化#includeiostream#includestring#includemap#includevector#includesstream// 简易JSON序列化器classJsonSerializer{private:std::ostringstream ss;voidwriteString(conststd::stringkey,conststd::stringvalue){ss""" key "":"" value """;}voidwriteInt(conststd::stringkey,intvalue){ss""" key "":"value;}public:std::stringserialize(conststd::mapstd::string,std::stringdata){ss.str("");ss"{";boolfirst=true;for(constauto[k,v]:data){if(!first)ss",";writeString(k,v);first=false;}ss"}";returnss.str();}};// 使用nlohmann/json库(推荐)// #include nlohmann/json.hpp// using json = nlohmann::json;structPlayer{std::string name;intlevel;std::vectorintscores;// 序列化为JSONstd::stringtoJson()const{std::ostringstream ss;ss"{"name":"" name "",";ss""level":"level",";ss""scores":[";for(size_t i=0;iscores.size();i++){if(i0)ss",";ssscores[i];}ss"]}";returnss.str();}// 从JSON反序列化staticPlayerfromJson(conststd::stringjsonStr){Player p;// 实际项目中应使用JSON解析库// 这里简化处理returnp;}};intmain(){Player player{"Alice",42,{100,95,88}};std::string json=player.toJson();std::cout"JSON: "jsonstd::endl;return0;}2.2 XML序列化#includeiostream#includestring#includesstreamclassXmlSerializer{private:std::ostringstream ss;intindent=0;voidwriteIndent(){for(inti=0;iindent;i++)ss" ";}public:voidbeginTag(conststd::stringtag){writeIndent();ss""tag"""\n";indent++;}voidendTag(conststd::stringtag){indent--;writeIndent();ss"/"tag"""\n";}voidwriteElement(conststd::stringtag,conststd::stringvalue){writeIndent();ss""tag""value"/"tag"""\n";}std::stringgetResult()const{returnss.str();}};structConfig{std::string host;intport;std::string database;std::stringtoXml
阅读完成 · 觉得有帮助?
咨询建站