Java 从文件读取列表时类强制转换异常
我正在尝试将我的主题状态保存到文件中。我有一个主题列表,我把它们写进文件里。我把它读了回来。但当我将它们强制转换到列表中时,我得到了类强制转换异常。我可以看到该对象返回了所有值,但无法将它们强制转换为列表 这是我的科目表Java 从文件读取列表时类强制转换异常,java,serialization,casting,Java,Serialization,Casting,我正在尝试将我的主题状态保存到文件中。我有一个主题列表,我把它们写进文件里。我把它读了回来。但当我将它们强制转换到列表中时,我得到了类强制转换异常。我可以看到该对象返回了所有值,但无法将它们强制转换为列表 这是我的科目表 private List<Subject> subjects; FileOutputStream fileStream = new FileOutputStream("SaveFile", true); ObjectOutputStream obj
private List<Subject> subjects;
FileOutputStream fileStream = new FileOutputStream("SaveFile", true);
ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);
objectStream.writeObject(subjects);
objectStream.close();
这是我从文件中读取的代码
FileInputStream inStream = new FileInputStream("SaveFile");
ObjectInputStream obStream = new ObjectInputStream(inStream);
List<Subject> newSubjects = (List<Subject>)obStream.readObject();
这是个例外
java.lang.ClassCastException:[Ljava.lang.Object;无法转换为java.util.List
在WebPageUpdateNotifier.Memento.getSavedDatamento.java:43
在WebPageUpdateNotifier.Client.runClient.java:66
在WebPageUpdateNotifierTest.ClientTest.testGetSubjectListClientTest.java:24
在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法中
位于sun.reflect.NativeMethodAccessorImpl.invokeUnknown源
我做错什么了吗?我在谷歌上搜索了很多,但我发现语法是正确的。
任何帮助都将不胜感激。我认为问题在于您正在附加到文件,而不是写入新内容。如果某个对象以前已序列化,然后通过附加到文件来序列化列表,则在反序列化后,您将获得旧对象 尝试从FileOutputStream的构造函数调用中删除布尔参数: 而不是
FileOutputStream fileStream = new FileOutputStream("SaveFile", true);
As obStream.readObject;返回一个对象,而不是对象列表。您可以按如下方式准备列表:
List<Subject> newSubjects;
while ((obj = (Subject)objIn.readObject()) != null) {
newSubjects.add(obj);
}
List subjects;subjects变量是实例化的还是null?该值通过构造函数设置。它返回您编写的任何内容。他编写了一个列表,他返回了一个列表。您的代码还依赖于null作为列表结束标记,您没有声明,或者假设readObject在流结束时返回null,而它没有。
List<Subject> newSubjects;
while ((obj = (Subject)objIn.readObject()) != null) {
newSubjects.add(obj);
}