gpt4 book ai didi

java - 如何用我自己的 readObject 调用替换 Java 的默认反序列化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:20 25 4
gpt4 key购买 nike

有人认为使用 Java 的默认序列化方法将数据库中的对象存储在 blob 列中是个好主意。这些对象的结构由另一个组控制,他们将字段类型从 BigDecimal 更改为 Long,但我们数据库中的数据保持不变。现在我们无法读回对象,因为它会导致 ClassCastExceptions。

我试图通过编写自己的 readObject 方法来覆盖它,但这会抛出 StreamCorruptedException,因为默认的 writeObject 方法写入了什么。

如何使我的 readObject 调用表现得像 Java 的默认调用?我可以跳过一定数量的字节来获取我的数据吗?

最佳答案

Externalizable允许您完全控制序列化/反序列化。但这意味着您负责编写和阅读每个领域,

当使用默认序列化写出某些内容并且您想通过 Externalizable 读取它时会变得困难。 (或者更确切地说,这是不可能的。如果您尝试使用 Externalizable 读取使用默认方法序列化的对象,它只会抛出异常。)

如果您完全无法控制输出,您唯一的选择是保留类的两个版本:使用旧版本的默认反序列化,然后转换为新版本。这个解决方案的好处是它将“脏”代码保存在一个地方,与你漂亮干净的对象分开。

同样,除非您想做的事情真的很复杂,否则最好的选择是将旧类保留为“传输”bean,并将您的代码真正使用的类重命名为其他名称。

关于java - 如何用我自己的 readObject 调用替换 Java 的默认反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com