反序列化如何创建单例的另一个实例

时间:2016-08-31 14:24:59

标签: java serialization singleton

我知道反序列化会创建Singleton的另一个实例。但为什么 ?它是否在内部调用私有构造函数?在什么实例上调用readResolve方法,如果反序列化的实例是一个完全不同的实例?

编辑:这个问题是关于不是枚举的传统单身人士。 建议的现有答案不同,因为它没有解释如何在内部调用readResolve。因此,不应将此问题标记为重复。

1 个答案:

答案 0 :(得分:0)

反序列化的事情是:它在某种程度上是黑魔法。

JVM在内部完成;它可以不用调用任何构造函数。基本上它的工作原理如下:

  1. JVM提供"内存"该对象需要
  2. 然后它接受序列化的字节......并将它们放入你的记忆中。
  3. 因此,是的;当你序列化一个单身人士时;并且在同一个JVM中对其进行反序列化,很有可能创建表示相同单例的两个对象。

    这种二进制(反)序列化的许多奇怪的副作用之一。