我一直在互联网(包括stackoverflow)上搜索我得到的这个错误的解释,但没有找到答案(或者至少一个我能理解的答案)。
我正在尝试序列化一个类,以便可以将对象保存到文件中。第一步是读取文件的当前内容,以便我可以添加一个新对象。为此,我使用以下代码:
//masterFilePath is a java.io.File that contains the "master file" I'm reading.
//ReportList is a simple extension of ArrayList
String[][] returner = null;
ReportList listOfReports = null;
try{
FileInputStream fileReader = new FileInputStream(masterFilePath);
ObjectInputStream objectReader = new ObjectInputStream(fileReader);
listOfReports = (ReportList) (objectReader.readObject()); //Problem Line
objectReader.close();
} catch (IOException | ClassNotFoundException e){
e.printStackTrace();
}
当它到达标记的行时//Problem Line
,会引发此错误:
com.Private.automatorContainers.ReportList; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 8996775622132817386
我知道我目前所拥有的8996...
就是 我无法弄清楚的 1 来自哪里。serialVersionUID
ReportList
我的工作理论是这样的:Serializable
在 ReportList 中实施之前,我有一个等于 的 UID 1L
,所以我假设这就是 1 的来源(对吗?请确认或否认?)
我有两个问题。首先,UID 存储在哪里?我不知道这样的东西存储在 .java 文件之外?我认为其他一切都是在编译时完成的。显然,我的理解存在漏洞。
其次,我如何让我的程序意识到 1 是错误的serialVersionUID
并且需要更新?