2016-05-21 62 views
0

我在序列化和反序列化我的项目中的对象时遇到问题。我正在将该对象写入一个name.dat文件。 但是,每当我在Name类中进行更改时,我都可以不再反序列化它,因为它是两个不同的对象。旧对象的Java反序列化

有没有办法解决这个问题?

+0

我想通了! –

+0

这是两个不同的类*,错误消息告诉你你需要做什么。 – EJP

+1

这就是为什么Java的内置序列化机制不适合长期存储数据的原因。使用诸如XML或JSON之类的标准格式来存储数据。 – Jesper

回答

1

你最好的选择是:

  1. 不要改变你的类:-)每次你改变你的类时
  2. 扔掉任何序列化对象。
  3. 请勿使用Java对象序列化。

考虑到1)和2)可能不合理,选项3)应予以认真考虑。 Java序列化有多种替代方法,具体取决于您持续保存的数据的性质。这些包括:

  • 使用Java属性文件
  • (使用SQL和JDBC API)
  • 使用对象关系数据库映射如Hibernate
  • 使用XML或在古典数据库中存储的数据JSON和“绑定”技术,以便您可以序列化/反序列化POJO。

最后,可以使用Java对象序列化来实现类的版本。然而,这很棘手。如果你不断地改变课程,那么它不会很愉快。首先阅读Versioning of Serializable Objects

+1

4.'static final long serialVersionUID = 1L;'或任何旧值。 – EJP

+0

是的......直到你做出不兼容的变化,它全部变成梨形。所以,真的,不。 –

+0

非常感谢!尽管添加static final serialVersionUID = 1L似乎更容易一些; :) –