问题描述
serialVersionUID是序列化和反序列化过程使用的 静态变量,用于验证本地类与用于序列化对象的类兼容。它不仅是静态变量,而且不像其他静态变量那样必须序列化。
当一个类的对象第一次被序列化时,一个包含了类名和序列号UID的类描述符被写入流中。反序列化时,JVM将检查从流中读取的串行版本UID是否与本地类之一相同。如果不是,它们甚至不会尝试反序列化对象,因为它知道类是不兼容的。
解决方法
我偶然了解了Java序列化。我读过许多文档和书籍,其中静态变量和瞬态变量无法在Java中序列化。我们声明一个serialVersionUid如下。
private static final long serialVersionUID = 1L;
如果静态变量未序列化,那么在反序列化过程中我们经常会遇到异常。
java.io.InvalidClassException
其中从反序列化对象中提取serialVersionUID并将其与已加载类的serialVersionUID进行比较。
据我所知,我认为如果静态变量不能序列化。毫无例外。我可能仍在学习,所以可能是错的。
“无法序列化Java中的静态变量和瞬态变量”是一个神话。请纠正我,我对这个概念一团糟。