Java 在序列化代理模式中如何调用代理类的readResolve()方法?

Java 在序列化代理模式中如何调用代理类的readResolve()方法?,java,serialization,marshalling,unmarshalling,Java,Serialization,Marshalling,Unmarshalling,我正在研究序列化代理模式。它基本上是说有一个代理类,应该声明为要序列化的封闭类的静态嵌套类。因此,基本思想是代理保护封闭的可序列化类免受序列化的危险 然而,我并不清楚具体的实现。为什么我们在外部类上调用writeReplace(),在代理类上调用readResolve()?由于代理类类似于外部类的静态成员,它将如何序列化?如果它没有被序列化,那么在反序列化期间如何在代理上调用readResolve() 我确信我在这里遗漏了一些基本的东西。有人能解释一下吗?检查一下的文档 writeReplace

我正在研究序列化代理模式。它基本上是说有一个代理类,应该声明为要序列化的封闭类的静态嵌套类。因此,基本思想是代理保护封闭的可序列化类免受序列化的危险

然而,我并不清楚具体的实现。为什么我们在外部类上调用
writeReplace()
,在代理类上调用
readResolve()
?由于代理类类似于外部类的静态成员,它将如何序列化?如果它没有被序列化,那么在反序列化期间如何在代理上调用readResolve()


我确信我在这里遗漏了一些基本的东西。有人能解释一下吗?

检查一下的文档

writeReplace()
readResolve()
是序列化引擎调用的特殊方法

writeReplace()
用代理替换正在序列化的对象,
readResolve()
用实际对象替换反序列化的代理


序列化代理类不必是要序列化的类的静态嵌套类。这只是一种更好地组织代码的约定。

因此,您是说代理上的
readResolve()
是由序列化引擎调用的,只是因为在对封闭类进行序列化之前调用了它上的
writeReplace()
,并且
writeReplace()
在代理不一定必须是静态嵌套类的最后一行返回了代理?+1。