持久化和序列化之间的区别是什么?

4

1
序列化是一种持久化类型,它允许将数据结构或对象转换为可以存储或传输的格式。 - MadProgrammer
一个对象的持久状态和序列化-反序列化有何不同? - Dhruv Kapatel
2
我认为你混淆了术语。持久化是一个概念或想法,序列化是这个想法的实现。序列化是将对象持久化的行为,反序列化是从其持久状态重新加载对象到内存中的行为... - MadProgrammer
好的...明白了,MadProgrammer,谢谢。 - Dhruv Kapatel
你链接中的"Henry Wong"的帖子是你问题的完整和正确答案。 - Brant Unger
3个回答

2

序列化是将一个对象转换为另一种表示形式的过程(通常是二进制形式,尽管您可以将其序列化为其他形式,如xml,但默认的Java序列化机制是二进制形式)。您可以持久化该对象的序列化形式以供读取(反序列化)以恢复该对象。序列化也用作将Java对象发送到进程/计算机之间的机制(例如使用RMI)。序列化不是持久性,但持久性是它可以使用的一种方式。


2
简单来说:序列化是将对象的表示形式更改为另一种形式(主要用于通过通信机制进行传输),而持久化则旨在将对象状态(以便稍后检索)保存到物理存储中。
这两个主题密切相关。大多数持久层都依赖于对象的序列化和反序列化,而不是提供二进制转储和还原对象。有趣的是,大多数开发人员认为实现序列化/反序列化过程是一项相当无聊的任务,而开发持久性层则更具有吸引力。显然,后者更为复杂,前者往往只是其中的一个子任务。

1
有人在那个链接中写道:“持久性是指在运行时会话结束和重新启动后,保持对象状态的能力。”这句话正确吗? - Dhruv Kapatel
是的,这很不错,但并不令人信服,因为它涉及太多。那么按照定义,运行时会话是什么?从进程开始到结束的持续时间?那肯定合适。 - Peter

2

持久化 - 一种机制,允许您在应用程序执行之间保留状态。

可能是数据库,也可能是文件,有时是缓存,在某些情况下非常奇怪,比如在云端。

序列化 - 一种表示对象的方式,以串行形式存储,以便以后恢复。

通常用于持久化对象。


1
“串行化文本形式”这个术语并不完全适用于Java,因为Java默认的序列化机制是二进制的。 - alf
“以串行文本形式表示对象的一种方式”对于像XML序列化这样的情况绝对是正确的,但例如在Java中,默认情况下是二进制的。它不必是人类可读的。 - Brant Unger
已删除对 文本 的引用 - 很好的建议。 - OldCurmudgeon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接