在我的很多数据库实体中,我存储了各种值的序列化哈希映射表。Java内置的HashMap类更改serialVersionUID的可能性有多大,这样我就无法从数据库中反序列化哈希映射表?
新的Java版本发布是否会引发此问题?
在我的很多数据库实体中,我存储了各种值的序列化哈希映射表。Java内置的HashMap类更改serialVersionUID的可能性有多大,这样我就无法从数据库中反序列化哈希映射表?
新的Java版本发布是否会引发此问题?
可能性很小,但是有可能。Java对象序列化规范定义了serialVersionUID生成的确切算法(第4章-http://download.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100),并且还解释了类型版本控制的工作原理以及什么被认为是兼容的类型演变(第5章-http://download.oracle.com/javase/6/docs/platform/serialization/spec/version.html)。
回到你的问题。如果新的Java版本在HashMap定义中引入了向后不兼容的更改,则会带有新的序列化UID。 Java 5清楚地表明了向后兼容性对于Java的重要性-看看泛型如何随着类型擦除而来。我认为你是完全安全的。最糟糕的情况是看到HashMap被弃用:),但我相信它仍然是兼容的。
你并不是“完全安全”的。在一个RowSet实现的情况下,这种情况已经发生过了,并且不能保证在整个Swing中不会再次发生。
然而,对于核心类来说,这仍然是高度不太可能的。