java - 如果我将来添加功能,如何确保我的 "database"不会损坏

标签 java

在我的应用程序中,我使用可序列化将数据存储到文件中。该文件包含 DictionaryEntry 对象的映射,这是我自己创建的一个类。我注意到,当我向该类添加字段时,它破坏了我现有的文件,因为它会读取它。编译器抛出了一个错误(我不记得是哪个错误)。 DictionaryEntry 的字段包含一些我绝对不能丢失的重要字段,那么将来如何在不删除所有数据的情况下向我的 DictionaryEntry 类添加更多字段和方法呢?

编辑:这是我添加新字段时遇到的错误

java.io.InvalidClassException: Logic.DictionaryEntry; local class incompatible: stream classdesc serialVersionUID = -637986868145725934, local class serialVersionUID = 1552091926235600295

最佳答案

您提出的问题非常笼统,您面临的问题可能是由于各种不同的原因造成的。我要求您通过提供编译代码时遇到的错误来澄清这一点。

就向类添加 mote 字段和方法而言,序列化允许一定量的类变化,这样即使在重构之后,ObjectInputStream 仍然可以很好地读取它。 Java 对象序列化规范可以自动管理的关键内容是:

  • 向类添加新字段。
  • 将字段从静态更改为非静态。
  • 将字段从 transient 更改为非 transient 。

采用其他方式(从非静态到静态或从非 transient 到 transient )或删除字段需要额外的处理,具体取决于您所需的向后兼容性程度。

关于java - 如果我将来添加功能,如何确保我的 "database"不会损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201799/

相关文章:

java - Stripes 忽略提交按钮事件

java - 除了 nuGet 之外,Octopus Deploy 是否与任何其他存储库(如 maven、npm)通信?

java - 如何在Java中创建一个巨大的.png加入较小的.png?

java - 我无法使用java中的Keylistener让这个形状移动

java - struts2 - 为什么要使用声明式验证?

java - BlackBerry 数学实用程序(Pow & Round)

java - APK注入(inject),重新编译android manifest

Java 套接字 - 通过一个连接与其他数据同时传输的文件

java - 将 8 位 ASCII 字符转换为字节

java - Android 应用程序不断崩溃,致命异常 Main