当前位置: 首页 > 面试题库 >

java中的可序列化如何工作?

戈建白
2023-03-14
问题内容

如果我有一个存储在会话中的类的实例,则需要使其可序列化。此类具有静态变量,是否在每个存储的实例中将其序列化?

静态变量是对在后台包含大量数据的缓存的引用。是否将所有这些数据序列化?如果是这样,则使该变量成为瞬态并在每次还原实例时重新获取缓存实例似乎是可取的。也许根本不将缓存实例存储在类中。

从序列化状态恢复类时,构造函数将执行吗?如果没有,我可以使用其他任何方法来恢复瞬态变量吗?


问题答案:

此类具有静态变量,是否在每个存储的实例中将其序列化?

否。根据Java对象序列化规范:“类的默认可序列化字段被定义为非瞬态和非静态字段。”

从序列化状态恢复类时,构造函数将执行吗?

不可以。反序列化会绕过构造函数(除非您具有不可序列化的超类)。

如果没有,我可以使用其他任何方法来恢复瞬态变量吗?

您可以使用该readObject()方法,如SerializableAPI文档中所述。



 类似资料:
  • 问题内容: 如何序列化未实现Serializable的对象?我不能将其标记为Serializable,因为该类来自第3方库。 问题答案: 您不能序列化未实现的类,但可以将其包装在可以实现的类中。为此,您应该在包装器类上实现和,以便可以以自定义方式序列化其对象。 首先,使您的非序列化字段。 在中,首先调用流以存储所有非瞬态字段,然后调用其他方法来序列化不可序列化对象的各个属性。 在中,首先调用流以读

  • 问题内容: 仅 子类具有已实现的接口。 我在这里注意到的一件事是,父类未序列化。然后,为什么它没有抛出却确实显示了以下内容 输出量 同样,输出不同于和。我只知道,这是因为父类尚未实现。但是,如果有人向我解释,在对象序列化和反序列化期间会发生什么。它如何改变价值?我不知道,我在程序中使用了注释。因此,如果我在任何时候错了,请告诉我。 问题答案: 根据可序列化的javadoc 反序列化期间,将使用该类

  • 我有一个kdtree,其节点由以下字段组成:公共静态类节点实现可序列化{ 其中DataPoint定义: 公共静态类DataPoint实现可序列化{公共可比X;公共可比Y;公共可比Z; 我想序列化树,存储在文件中并在回答范围查询时反序列化。我对这个概念od序列化的理解并不好。从我收集的任何内容中,我编写了以下函数,但不起作用。有人能帮忙吗?

  • 问题内容: 我想深入克隆一个列表。为此,我们有一种方法 所以现在要克隆我的列表,我应该先将其转换为可序列化的。是否可以将列表转换为可序列化列表? 问题答案: 已实施的所有标准实施。 因此,即使它本身不是的子类型,也可以安全地将列表强制转换为,只要您知道它是诸如或的标准实现之一。 如果不确定,请先复制列表(使用),然后知道它是可序列化的。

  • 问题内容: 如何优雅地序列化lambda? 例如,下面的代码抛出。如何在不创建“虚拟”界面的情况下进行修复? 问题答案: Java 8引入了通过添加多个边界将对象转换为类型的交集的可能性。因此,在序列化的情况下,可以编写: 并且lambda自动变为可序列化的。

  • 如题目所述,想请教一下大佬们在Java中序列化与反序列化的意义是什么,如何理解Java的序列化和反序列化?