基于SerialVersionUID的描述:https://docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html#a4100 ,似乎必须始终在您创建的任何类中包含SerialVersionUID,以便用于序列化的JVM和用于反序列化的不同JVM不会自动分配它们自己的SerialVersionUID,由于JVM的不同,它们可能彼此不同.这适用于控制我自己的类的反序列化,但是如果我想确保JVM B序列化的标准库中的类可以被JVM B反序列化呢?
Map<Integer, String> myMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
HashMap定义了一个SerialVersionUID.但:
如果不能保证标准库类,那么使用SerialVersionUID是否真的只能确保您自己的类从未触及java标准库的正确反序列化?例如,一个看起来像这样的类:
public class NewClass implements Serializable
{
private static final long serialVersionUID = 1L;
private final Map<Integer, String> myMap;
public NewClass()
{
this.myMap = new HashMap<>();
}
}
Run Code Online (Sandbox Code Playgroud)
因为反序列化依赖于具有相同SerialVersionUID的HashMap,这在不同的JVM中可能会有所不同,对吧?