尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C++序列化与反序列化实战:从文本到二进制,面试必考的数据持久化技术全解析
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
RELATED

相关推荐

我做 Agent Memory 论文时踩过的四个坑:从合成数据到真实长对话,TaoToken 统一 Key 配置避雷指南

我做 Agent Memory 论文时踩过的四个坑:从合成数据到真实长对话,TaoToken 统一 Key 配置避雷指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/29 20:10:42
IPD 集成产品开发:信创背景下,软件产品需求评审流程数字化改造实践

IPD 集成产品开发:信创背景下,软件产品需求评审流程数字化改造实践

1. 引言 信创(信息技术应用创新)项目有一个显著特点:需求变化快、交付节奏紧、干系人层级多、角色杂。传统线下评审会往往要凑齐业务、产品、研发、测试、实施等多方时间,一轮评审动辄一周,需求基线形同虚设、难以约束…

📅 2026/9/29 20:05:42
用 UUID 当 MySQL 主键,上线半年后为什么写入性能掉一半?

用 UUID 当 MySQL 主键,上线半年后为什么写入性能掉一半?

用 UUID 当 MySQL 主键,上线半年后为什么写入性能掉一半? 很多人觉得分布式场景下直接用 UUID 当数据库主键省事,既不用考虑自增 ID 耗尽,也不用担心分库分表时的冲突。 如果你把它用在 MySQL 的 InnoDB 引擎里,刚上线…

📅 2026/9/29 20:05:42
MORE NEWS

更多资讯

📰

OpenRig环境准备清单:tmux、Codex登录与前置依赖逐项核查教程

OpenRig环境准备清单:tmux、Codex登录与前置依赖逐项核查教程 【免费下载链接】openrig Multi-agent harness that runs Claude Code and Codex together as one system 项目地址: https://gitcode.com/GitHub_Trending/op/openrig 为什么你需要这份 OpenRig…

📰

Codex++ 安全边界实战指南:TaoToken 统一 Key 下的风险识别与防御部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

跨境零售库存与定价人工调控滞销囤货问题很难提前预判?2026智能体自动化方案实战:用 TaoToken 统一 Key 打通配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

工控现货采购指南:PLC停产备件应急与真假鉴别实战

上个月碰到一个特别典型的场景:半夜十二点,客户打电话说产线上的一台西门子S7-300 CPU挂了,备用机前一个月刚好被借走,仓库里连个旧的都没有。第二天早上代理商报价,全新货期六到八周,车间停一小时就是几万…

📰

MATLAB 图像标注实战:用 textarrow 与 annotation 精准标记数据点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

IntelliJ IDEA 2026.1 EAP 3 紧急发布:AI 能力再加强,回收站终于有了!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬