什么是什么

什么是序列化和反序列化

理论上 这是基础中的基础,但是说实话越是基础越是不容易去细看,我一直只有模糊的概念,比如以Java为例,一个对象返回给前端是用的 json,对象->json 的过程就是序列化,json 到对象都过程就是反序列化,但是具体是对错与否,帮我进行这个操作的函数、框架下面是不是还有更多内容,却从未深究,这次水一篇博客来讲一讲这是什么意思 定义 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型。在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象–这两个功能就是序列化和反序列化。一般而言,TCP/IP协议的应用层对应与OSI七层协议模型的应用层,展示层和会话层,所以序列化协议属于TCP/IP协议应用层的一部分。本文对序列化协议的讲解主要基于OSI七层协议模型。 序列化: 将数据结构或对象转换成二进制串的过程 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程 这里摘自 美团技术团队 15 年的文章,我也就从这里开始引入吧 通俗比喻 假设你家有很多家具:沙发、电视、冰箱、床…… 搬家的时候,你得把它们拆开、装进箱子,贴上标签 —— 这就是序列化。 到了新家,打开箱子、按照标签重新组装、恢复成原来的样子 —— 这就是反序列化。 由浅入深 现在从最常见的序列化协议入手,先是 json ,这个在现代系统里面最常见了,打开web 也好,网络请求很多都是用 json 传输内容的。那么 who is ‘Json’ json 1 2 3 4 { "name": "Ray", "age": 25 } 大概就长这样,如果我把它放到 Java 对象里面 它可以是这样的 java 1 2 3 User user = new User(); user.setName("Ray"); user.setAge(25); 这个 user 实际上存在于内存中。 而 Java 内存里是怎么存的? 栈(Stack)里只保存引用:user → 0x1008 真正的数据在堆(Heap)里面: 1 2 3 4 5 6 7 8 9 10 11 12 13 0x1008 (User 对象) ┌──────────────────────────────┐ │ Object Header │ │ klass pointer │ │ │ │ name ───→ 0x2010 │ │ age = 25 │ └──────────────────────────────┘ 0x2010 (String 对象) ┌─────────────┐ │ value="Ray" │ └─────────────┘ ...

July 9, 2026 · 2 min · 341 words · Updated: July 10, 2026 · Ray