新闻详情

新闻详情

首页 / 资讯中心 / 详情

序列化 与 反序列化 解读

发布时间:2026/9/29 3:27:31来源:尧图网络
序列化 与 反序列化 解读
前言做工具开发的小伙伴对序列化和反序列化应该很熟悉几乎每天打交道。本文我们一起入个门。目录一、概念二、为什么需要序列化三、代码示例一、概念序列化是这样一个过程将内存中的数据或对象转化为可以存储或传输的格式如 字节流、XML、JSON。反序列化顾名思义是反过来的过程将字节流还原为内存中的真实数据或对象。我们可以打一个比方你在网上买东西所有的东西都被打包好打包成一个大包裹塞进车厢进行运输。这可以粗暴理解为序列化将快递打包成可运输的状态。送到快递分拣站后将大包裹拆分通过菜鸟驿站将一个个快递送到客户手里。这可以理解为反序列化将打包的快递还原回去。二、为什么需要序列化如果你想把这台机器上的文件或数据送到另一台机器上它们之间无法通过当前内存直接交互必须将这台机器上运行的数据或对象转化为字节流然后通过网络的形式传输到另一台机器。所以我们需要序列化。假如有一个正在运行的程序内存中有很多对象或数据而这些内存中的数据在程序退出后就消失了。如果你想将这些运行中的数据保存下来就必须将它们转化为可以存储的形式JSON、二进制写入磁盘。所以我们需要序列化。三、代码示例1二进制序列化#include iostream #include vector #include cstring struct Point { float x, y; int id; }; // 序列化对象 → 字节数组 std::vectoruint8_t serialize(const Point p) { std::vectoruint8_t buf(sizeof(Point)); std::memcpy(buf.data(), p, sizeof(Point)); return buf; } // 反序列化字节数组 → 对象 Point deserialize(const std::vectoruint8_t buf) { Point p; std::memcpy(p, buf.data(), sizeof(Point)); return p; } int main() { Point original{3.14f, 2.72f, 22}; auto bytes serialize(original); // 序列化 Point restored deserialize(bytes); // 反序列化 std::cout restored.x , restored.y , restored.id \n; return 0; }2JSON#include nlohmann/json.hpp using json nlohmann::json; struct Config { std::string host; int port; }; // 序列化 Config cfg{127.0.0.1, 8080}; json j {{host, cfg.host}, {port, cfg.port}}; std::string text j.dump(); // → {host:127.0.0.1,port:8080} // 反序列化 json parsed json::parse(text); Config restored{parsed[host], parsed[port]};3Protobuf// person.proto syntax proto3; message Person { string name 1; int32 age 2; repeated string emails 3; }#include person.pb.h // 序列化 Person p; p.set_name(Alice); p.set_age(30); p.add_emails(aliceexample.com); std::string bytes; p.SerializeToString(bytes); // → 紧凑二进制 // 反序列化 Person restored; restored.ParseFromString(bytes); std::cout restored.name() \n;
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

提升办公效率:OpenClaw 本地自动化 AI 工具搭建实战教程(TaoToken 统一 Key 配置篇) 2026/9/29 4:19:39

提升办公效率:OpenClaw 本地自动化 AI 工具搭建实战教程(TaoToken 统一 Key 配置篇)

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

阅读更多 →
Zephyr BSP: 38-多板多芯片支持 2026/9/29 4:19:39

Zephyr BSP: 38-多板多芯片支持

摘要:本文围绕 Zephyr BSP 中 Multi-Board / Multi-Chip 的核心问题展开:哪些能力放在 SoC 层、哪些放在 Board 层、哪些通过 Devicetree/Kconfig 表达。文章从「SoC 描述芯片有什么,Board 描述板子实际用了什么」这一第一原则出发,依次讲解 Family → Variant 的 SoC 组织…

阅读更多 →
MCP(Model Context Protocol) 配 TaoToken:settings.json 骨架与连通性验证 2026/9/29 4:19:39

MCP(Model Context Protocol) 配 TaoToken:settings.json 骨架与连通性验证

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

阅读更多 →
VSCode + Cline + Continue + GLM5.2 配 TaoToken:AI 代码学习上瘾前的配置文件骨架 2026/9/29 4:19:39

VSCode + Cline + Continue + GLM5.2 配 TaoToken:AI 代码学习上瘾前的配置文件骨架

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

阅读更多 →
Zephyr BSP: 36-Zephyr集成公司HAL 2026/9/29 4:19:32

Zephyr BSP: 36-Zephyr集成公司HAL

摘要:本文是 Zephyr BSP 系列第 36 篇,核心回答一个现实问题——公司已有 HAL 时,Zephyr Driver 该如何与之协作。文章首先给出最终架构:Zephyr Driver 调 Company HAL,Company HAL 直接操作 SoC,并解释为什么不要让 Driver 直接操作寄存器(避免代码重复、绕过 SoC work…

阅读更多 →
Zephyr BSP: 35-BSP Validation Overview 2026/9/29 4:19:32

Zephyr BSP: 35-BSP Validation Overview

摘要:本文是 Zephyr BSP 系列的第 35 篇,核心结论是「blinky 能跑 ≠ BSP 完成」。文章系统性地拆解了 BSP Validation 的完整方法论:从 Build、Boot、CPU、Memory、Clock、Interrupt、GPIO、UART、Timer、SPI、I2C、Flash、Debug 到 Regression 共 14 个验证层次,并给出每…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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