我开始使用面向对象编程 (OOP),想知道:在 OOP 用语中,序列化的含义是什么?
16 回答
序列化是将内存中的对象转换为字节流的过程,因此您可以执行诸如将其存储在磁盘上或通过网络发送之类的操作。
反序列化是相反的过程:将字节流转换为内存中的对象。
简单地说,序列化是将对象转换为字节流的过程,以便它可以通过网络传输或存储在持久存储中。
反序列化正好相反——从网络或持久存储中获取字节流并将其转换回具有相同状态的对象。
要了解的是如何解释或操作这些字节流,以便我们获得完全相同的对象/相同的状态。有多种方法可以实现这一目标。他们之中有一些是 -
- XML:将对象转换为 XML,通过网络传输或存储在文件/数据库中。检索它并将其转换回具有相同状态的对象。在 Java 中,我们使用JAXB(用于 XML 绑定的 Java 架构)库。(从 java 6 开始,它与 JDK 捆绑在一起)。
- JSON:同样可以通过将对象转换为JSON(JavaScript 对象表示法)来完成。同样有可以用于此的 GSON 库。
- 或者我们可以使用 OOP 语言本身提供的序列化。例如,在 Java 中,您可以序列化一个对象,使其实现
Serializable interface
并写入对象流。
什么是序列化?
通过图片简单解释:
概括:
序列化意味着将某些东西(例如我的狗 Rex)转换为一系列 1 和 0 - 可以通过电话线传输,存储在内存中。然后,我在海外的朋友可以将这些 1 和 0 翻译回小狗的完美表示(反序列化),这样他们就可以享受 Rex 的陪伴。
类比的澄清
朋友,这是一个比喻。我认为您实际上无法连载小狗LOL。您将序列化数据结构或其他一些复杂对象。(我写了这个答案,这样你就可以在不到 10 秒的时间内以一种有趣的方式理解这个概念,而不会打破你的技术百科定义。但如果你更喜欢一个,请查看:这个 Wikipedia 链接)。
看看这个,这会给你一个很好的解释:
http://en.wikipedia.org/wiki/Serialization
我认为序列化一词最常见的用法是将二进制对象转换为 XML(或其他字符串)表示形式,以便可以将其存储在数据库/文件中或在 Web 服务调用中通过网络发送。反序列化是相反的过程 - 将 XML/字符串转换回对象。
编辑:您可能会遇到的另一个术语是编组/解组。编组与序列化的概念基本相同,解组与反序列化相同。
序列化是将对象转换为字节流以存储对象或将其传输到内存、数据库或文件的过程。它的主要目的是保存对象的状态,以便能够在需要时重新创建它。反向过程称为反序列化。
...
这张图展示了序列化的整体流程
...
通过序列化,开发人员可以执行以下操作,例如通过 Web 服务将对象发送到远程应用程序、将对象从一个域传递到另一个域、将对象作为 XML 字符串通过防火墙传递,或者维护安全性或用户特定跨应用程序的信息
来自https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/
(强调我的)
序列化是将无序数据(例如对象)转换为一系列标记的过程,这些标记可以在以后用于重建原始数据。序列化形式通常是一串文本,但并非必须如此。
序列化是将 Java、C# 或任何其他(OOP 语言)支持的对象转换为可传输形式的过程。通过这种方式,它可以通过网络传输或存储在磁盘上。要使一个类可序列化,它必须实现可序列化接口。
序列化是将对象转换为可存储的位序列。
因此您可以将此序列保存到文件、数据库或通过网络发送。
稍后您可以将其反序列化为实际对象并在需要时重用它。
Web 服务和AJAX是最常见的序列化示例。在向客户端发送响应之前序列化的对象。
从类(蓝图)实例化(构造)实际对象(事物)时,需要通过将对象(事物)序列化(将其分解为其基本原子结构)到内存空间中来保存对象(事物)。(有点像星际迷航运输车)。您将事物分解为可以在某处传输和存储的信息流。然后,当您想要重建事物时,您只需将原子存储的实例拉回对象中。不同于实例化。
序列化只不过是将 java 支持的对象转换为文件支持的形式
(OR)
将 java 支持的形式转换为网络支持的形式..序列化的主要范围不过是将数据从一层传输到另一层...只有我们可以通过网络发送的序列化对象..
序列化将数据转换为线性的字节“字符串”。
其他人或多或少说了同样的话,但我强调计算机模型要求数据适合一维寻址的 RAM 或持久存储。
大多数“数据”的东西本质上都是可序列化的(即使您必须将抽象模型简化为线性模型);不可序列化的网络连接或复杂的基于状态的机器(如解析器)。
序列化与将二进制对象转换为 XML(或其他字符串)表示形式有关,以便可以将其存储在数据库/文件中或在 Web 服务调用中通过网络发送。反序列化是相反的过程 - 将 XML/字符串转换回对象。
序列化是将对象转换为二进制数据流的过程,以便可以将其存储在文件中或通过网络发送,在该网络中可以将其复活回同一对象。
本文档应该可以帮助您详细了解 Java 序列化。
序列化是当对象的状态可以保存在文件中时(例如)将对象(一块内存)转换为一种形式。
只需将其视为制作饼干 - 对象是面团,饼干 - 是序列化的面团。
因此,通过“序列化”,您可以将 cookie 发送给您的朋友。
类似的东西:-)
序列化的名称可能来自对内存中的数据进行碎片整理。这里描述什么是内存碎片 什么是内存碎片?
只需考虑以下想法即可理解它。
序列化:
"hello world".split() returns ['hello', 'world']
反序列化:
" ".join(['hello', 'world']) returns "hello world"