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

标签 java oop object serialization stream

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

最佳答案

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

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

我们为什么要这样做?

有几个原因:

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

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

  • 深拷贝:如果您需要一个对象的精确副本,并且不想麻烦编写自己的专用 clone() 类,只需序列化对象即可到一个字节数组,然后反序列化到另一个对象就达到了这个目的。

  • 缓存:实际上只是上面的一个应用,但有时一个对象需要 10 分钟来构建,而反序列化只需要 10 秒。因此,与其将这个巨大的对象保存在内存中,不如通过序列化将其缓存到一个文件中,然后在需要时将其读取。

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

关于java - Java中序列化的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232759/

相关文章:

java - 如何从命令行运行带有包的java项目?

Java - Swing - JTable - 为选定行设置颜色,但不为单元格设置颜色

sql - SOLID 存储过程和函数

javascript - 用原型(prototype)继承覆盖方法

java - 无法在 Android 中更改 TextView 的文本

java - 我缺少什么来运行 jersey 2 网络服务?

c++ - 在 C++ 中如何控制对对象的访问?

java - Firebase 在 Release模式下找不到要序列化的对象的属性

javascript - 在数组中使用 split

javascript - 对象变成数组