【问题标题】:what problem does the serialization proxy pattern solves that the serialization pattern doesn't solve?序列化代理模式解决了哪些序列化模式没有解决的问题?
【发布时间】:2011-05-10 03:20:45
【问题描述】:

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

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

我读过http://lingpipe-blog.com/2009/08/10/serializing-immutable-singletons-serialization-proxy/(谷歌中唯一一个谈论代理序列化模式的网站),但仍然找不到使用它的优势好处图案。有人可以解释一下代理序列化模式到底是什么,或者更确切地说,代理序列化模式解决了正常序列化模式无法解决的问题吗?

【问题讨论】:

    标签: c# java vb.net serialization proxy


    【解决方案1】:

    默认序列化:

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

    第二点值得商榷。谁改变了字节流的数据?如果发生这种情况,我们将面临比反序列化更大的问题:安全性。签名/加密流也可以解决序列化问题。

    第一个是真实的。序列化同一个单例几次,反序列化另一边,哎呀!你有多个单例(多音?)。不过,恕我直言,这个问题更容易通过使用 Enum 制作单例来解决,然后 JVM 将自己强制执行单个实例。

    更新

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

    【讨论】:

    • 动态更改对象的问题 - 如果您更改对象签名(基本上任何可以使用串行器为您提供不同结果的任何内容),您的序列化将与任何先前序列化的对象不兼容。将序列化行为移动到一个单独的对象中可以使您在某种程度上与此隔离(当然,直到您的代理变得不兼容)。
    • 这个可以理解。文章虽然说:“问题是你可以序列化一个实例,调整代表数字的字节,然后反序列化。”这不是同一个问题(不是版本不兼容)。
    • 我并不是专门谈论序列化单例。我只是在序列化普通实例..
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2021-03-10
    • 2022-01-17
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多