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

标签 java serialization marshalling unmarshalling

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

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

我确信我在这里遗漏了一些基本的东西。有人可以透露一些信息吗?

最佳答案

查看 Serializable 的文档.

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

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

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

关于java - 在序列化代理模式中如何调用代理类的 readResolve() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18694326/

相关文章:

java - 如何为包含多个 JPanel、JButton 和 JLabel 的 JFrame 设置背景颜色?

java - 在 AWS Lambda (java) 中使用环境变量更改 Log4j 级别

java - Android 应用程序 Gmail 的 OAuthentication 错误

jQuery:表单序列化、隐藏字段和不显示字段

c# - 如何从 C# 调用采用指向 BSTR 的指针的 COM 方法

c# - 将 Color32[] 数组快速复制到 byte[] 数组

.net - 如何编码(marshal)结构数组 - (.Net/C# => C++)

java - JSONObject 覆盖 JSONArray

将对象序列化到文件时的 C# 最佳实践

C# TheMovieDB serializer.Deserialize 返回 0 条记录