我有一个带有成员变量的序列化类,这是将文件写入文件,即文件中的每个记录代表此类。稍后,根据新要求,会员变量的类型之一已更改,并且可以写入新文件,它可以正常工作。但是,当我尝试读取旧文件(在此更改之前编写的文件)时,它会抛出ClassCastException,说"旧数据类型成员无法分配给新的数据"。例如:我的班级结构是:
Public class MyClass implements Serializable
{
Date m_date;
String m_name;
}
因此,这代表文件中的一个记录。然后,根据新要求,我已将" m_date"变量数据类型从日期更改为自定义类型(自定义类,也可以说也是可序列化的),因此类结构已成为现在:
Public class MyClass implements Serializable
{
ABC m_date;
String m_name;
}
所以,我在这里遇到的问题是,当我尝试读取具有每个类型日期和字符串记录的旧文件时,它会在这条代码上引发异常:
while ( ( record = inputStream.readObject() ) != null )
因此,它清楚地表明,在阅读记录时,将日期类型分配给不兼容类型ABC。
。我的问题是:如何确保在阅读旧文件时,我可以更新到ABC的类型日期并返回更新的记录,因此更新记录将具有ABC类型和字符串的值?
注意:我已经可以将日期类型更改为ABC的逻辑。
请提供/指导我的解决方案。
〜谢谢。
您对此别无选择。您必须将课程更改回原始定义。然后,我将添加新的ABC
类型作为带有新名称的新数据成员。或者,您可以提供将旧的m_date
成员映射到新ABC
数据类型的Getters和Setter。
有现有的序列化后,如果您想继续能够读取该序列化,则无法对类别进行序列化的更改,而更改非静态非透视成员字段的类型是不兼容的更改。请参阅Java序列化规范的对象版本控制章节。