【发布时间】:2021-06-01 12:04:44
【问题描述】:
我有一个名为Subject 的数据类。在某些情况下,我需要对其进行序列化并将其保存到本地文件中。然后,出于某种原因,我需要从本地文件中反序列化它。问题是:当我的应用升级和Subject类发生变化时,如何保留旧数据并成功反序列化?
【问题讨论】:
我有一个名为Subject 的数据类。在某些情况下,我需要对其进行序列化并将其保存到本地文件中。然后,出于某种原因,我需要从本地文件中反序列化它。问题是:当我的应用升级和Subject类发生变化时,如何保留旧数据并成功反序列化?
【问题讨论】:
您可以使用 https://www.geeksforgeeks.org/serialversionuid-in-java/
SerialVersionUID 用于确保在反序列化期间加载相同的类(在序列化过程中使用)。
这是为了避免问题。否则,您可以使用新类成员中的默认值来使用新类读取旧值。
一些自定义序列化库对此有注释: https://www.baeldung.com/jackson-field-serializable-deserializable-or-not https://doc.akka.io/docs/akka/current/serialization-jackson.html(包括二进制)
【讨论】:
SerialVersionUID 和@Transient,但它不适合我的情况。如果我使用相同的SerialVersionUID,反序列化后可能会崩溃,崩溃很难被发现。所以解决方案可以是:像DAO框架Room一样,手动将旧数据映射到新的类结构。但我不知道如何实现它。