瞬态变量能否以任何方式序列化?

时间:2016-09-04 09:22:48

标签: java

我在接受采访时遇到了这个问题。请帮我找到答案。问题是瞬态变量能否以任何方式序列化?

2 个答案:

答案 0 :(得分:8)

statictransient字段默认情况下未序列化。

但是如果

,它们可以序列化
  • 可通过序列化字段访问同一对象。
  • 该对象在readObject / writeObject或readExternalizable / writeExternalizable中序列化。
  • 您正在使用具有不同规则的其他序列化库(我不知道哪个序列化static字段,但我曾经错误地编写了这样的库一次)

通常会将字段transient表示不应序列化,但有时可能是因为

  • 类型不是Serializable
  • 您不想使用默认的序列化。

答案 1 :(得分:0)

最近一次采访中,我也被问到了这个问题,在这里我回答了

是的,临时成员可以序列化。为了达到相同的目的,我们需要执行以下操作:

  • 使您无法序列化的字段瞬变
  • 在writeObject()中,首先将流上的defaultWriteObject()调用为 存储所有非瞬态字段,然后调用其他方法 序列化不可序列化对象的各个属性。
  • 在readObject()中,首先在流上调用defaultReadObject()以读取 返回所有非瞬态字段,然后调用其他方法 (与您添加到writeObject的对象相对应)反序列化 您的不可序列化对象。