新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/29 20:10:48来源:尧图网络
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

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【Claude】5xx Generic Retry 错误:通用服务端错误的重试策略与熔断机制 bug报错已解决 2026/9/29 20:48:51

【Claude】5xx Generic Retry 错误:通用服务端错误的重试策略与熔断机制 bug报错已解决

/* 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:48:50

以太网变送器双协议批量配置实战指南

1. 为什么“双协议批量配置”不是锦上添花,而是大规模环境监测项目的生死线我接手过三个超500个点位的工业级环境监测项目,最深的体会是:设备部署完成≠系统可用。真正卡住交付进度、拖垮运维成本的,从来不是传感器精度或外壳防护…

阅读更多 →
小米MiMo Orbit 100万亿Token激励计划:Cursor开发者如何用TaoToken统一API通道接入 2026/9/29 20:48:50

小米MiMo Orbit 100万亿Token激励计划:Cursor开发者如何用TaoToken统一API通道接入

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

阅读更多 →
RJ45以太网温湿度传感器在配电柜的工业级部署指南 2026/9/29 20:48:49

RJ45以太网温湿度传感器在配电柜的工业级部署指南

1. 项目概述:为什么配电柜里要装“会说话”的温湿度传感器? 在电力中心这种地方,配电柜不是摆设,它是整个供配电系统的神经节点。我干这行十多年,见过太多因为环境失控导致的故障——夏天午后柜内温度飙到65℃&#xf…

阅读更多 →
DeepSeek官方API总是服务器繁忙?用TaoToken统一Key接入硅基流动满血版DeepSeek-R1 2026/9/29 20:48:42

DeepSeek官方API总是服务器繁忙?用TaoToken统一Key接入硅基流动满血版DeepSeek-R1

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

阅读更多 →
从Copilot到Agent:我的开发工作流正在被TaoToken颠覆 2026/9/29 20:48:42

从Copilot到Agent:我的开发工作流正在被TaoToken颠覆

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉