Java 中序列化的目的是什么?

2022-08-31 09:24:22

我读过很多关于序列化的文章,以及它是如何如此美好和伟大的,但没有一个论点足够令人信服。我想知道是否真的有人可以告诉我,通过序列化一个类,我们真正可以实现什么?


答案 1

让我们先定义序列化,然后我们可以讨论为什么它如此有用。

序列化只是将现有对象转换为字节数组。此字节数组表示对象的类、对象的版本以及对象的内部状态。然后,可以在运行相同代码的JVM之间使用此字节数组来传输/读取对象。

我们为什么要这样做?

有几个原因:

  • 通信:如果您有两台运行相同代码的计算机,并且它们需要通信,则一种简单的方法是让一台计算机使用它要传输的信息构建一个对象,然后将该对象序列化到另一台计算机。这不是最好的沟通方式,但它可以完成工作。

  • 持久性:如果要将特定操作的状态存储在数据库中,可以很容易地将其序列化为字节数组,并存储在数据库中以供以后检索。

  • 深度复制:如果您需要对象的精确副本,并且不想麻烦编写自己的专用 clone() 类,只需将对象序列化为字节数组,然后将其反序列化为另一个对象即可实现此目标。

  • 缓存:实际上只是上述应用程序,但有时构建对象需要10分钟,但反序列化只需要10秒。因此,与其将巨型对象保留在内存中,不如通过序列化将其缓存到文件中,并在以后需要时读取它。

  • 跨 JVM 同步:序列化适用于可能在不同架构上运行的不同 JVM。


答案 2

运行应用程序时,其所有对象都存储在内存 (RAM) 中。当您退出时,该内存作系统回收,并且您的程序基本上“忘记”了运行期间发生的所有事情。序列化通过让应用程序将对象保存到磁盘来解决此问题,以便它可以在下次启动时读取这些对象。如果您的应用程序要提供保存/共享先前状态的任何方法,则需要某种形式的序列化。