我需要能够将一个类序列化为一个字符串,我知道 2 种模式:
1)(正常)序列化模式 2) 代理序列化模式
我读过 http://lingpipe-blog.com/2009/08/10/serializing-immutable-singletons-serialization-proxy/ (谷歌中唯一一个谈论代理序列化模式的网站)但仍然找不到使用这种模式的优势或好处。谁能解释一下代理序列化模式到底是什么,或者更确切地说,代理序列化模式解决了哪些正常序列化模式无法解决的问题?
最佳答案
默认序列化:
- 创建在反序列化时应该是单例的类的多个实例
- 据推测在更改动态反序列化对象方面存在问题(是吧?)
第二点值得商榷。谁更改了字节流的数据?如果它可能发生,我们有一个比反序列化更大的问题:安全性。签名/加密流也可以解决序列化问题。
第一个是真实的。序列化同一个单例几次,在另一侧反序列化,哎呀!你有多个单例(多音?)。恕我直言,这个问题通过从 Enum 中创建一个单例更容易解决,然后 JVM 将强制执行单实例本身。
更新
正如 Steve B 所指出的,博主可能误解/歪曲了他读到的内容。而不是“序列化,调整字节,然后反序列化”应该阅读“序列化,部署类的新版本,反序列化”。是的,这是已知问题,Externalizable 接口(interface)允许通过完全控制类序列化来巧妙地解决它,因此即使类的较新版本也可以从以前版本创建的流中反序列化自己的数据(如果可能的话)完全没有)。
关于c# - 序列化代理模式解决了什么序列化模式没有解决的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944805/