序列化代理模式解决了序列化模式无法解决的问题

本文关键字:序列化 解决 模式 问题 代理 | 更新日期: 2023-09-27 17:56:11

我需要能够将类序列化为字符串,我知道 2 种模式:

  1. (正常)序列化模式
  2. 代理序列化模式

我已经阅读了这个博客(谷歌中唯一一个谈论代理序列化模式的网站),但仍然找不到使用这种模式的优势好处。有人可以解释代理序列化模式到底是什么,或者确切地说,代理序列化模式解决了正常序列化模式无法解决的问题?

序列化代理模式解决了序列化模式无法解决的问题

默认序列化:

  • 在反序列化时创建多个应该是单例的类实例
  • 据说在动态反序列化对象方面存在问题(嗯?

第二点是有争议的。谁更改了字节流的数据?如果发生这种情况,我们有一个比反序列化更大的问题:安全性。签名/加密的流也可以解决序列化问题。

第一个是真实的。序列化相同的单例几次,在另一侧反序列化,哎呀!您有多个单例(多音?恕我直言,通过用 Enum 制作一个单例更容易解决这个问题,然后 JVM 将强制执行单个实例本身。

更新

正如史蒂夫B所指出的,博客海报可能误解/歪曲了他所读的内容。而不是"序列化,调整字节,然后反序列化",应该读作"序列化,部署类的新版本,反序列化"。是的,这是已知问题,并且外部化接口允许通过完全控制类序列化来巧妙地解决它,因此即使是该类的更高版本也可以从以前版本创建的流中反序列化自己的数据(如果可能的话)。