Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文件读取列表时类强制转换异常_Java_Serialization_Casting - Fatal编程技术网

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);
}