/ / Class Cast изключение, докато четене списък от файла - Java, сериализация, кастинг

Изключение за класове по класове при четене на списък от файла - Java, сериализация, кастинг

Опитвам се да запазя състоянието на моите субекти във файл. Имам списък с теми и ги записвам във файла. И аз прочетох обекта обратно. Но когато ги хвърля в списъка, получавам изключение от класа. Мога да видя, че обектът се връща с всички стойности, но не може да ги прехвърли в списъка.

Това е моят списък от теми

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.обекта; не може да бъде прехвърлен към java.util.List на WebPageUpdateNotifier.Memento.getSavedData (Memento.java:43) на WebPageUpdateNotifier.Client.run (Client.java:66) на WebPageUpdateNotifierTest.ClientTest.testGetSubjectList (ClientTest.java:24) at sun.reflect.NativeMethodAccessorImpl.invoke0 (естествен метод) at sun.reflect.NativeMethodAccessorImpl.invoke (неизвестен източник)

Правя ли нещо нередно? Аз googled много, но намерих синтаксиса да бъде прав. Всяка помощ ще бъде много оценявам.

Отговори:

1 за отговор № 1

Мисля, че проблемът е, че вие ​​добавяте към файла, вместо да пишете ново съдържание. List<Subject> като добавите към файла, след депортирането ще получите стария обект.

Опитайте да премахнете булевия аргумент от повикването на конструктора на FileOutputStream:

FileOutputStream fileStream = new FileOutputStream("SaveFile");

вместо

FileOutputStream fileStream = new FileOutputStream("SaveFile", true);

-1 за отговор № 2

Като obStream.readObject (); връща Object не списък на Object. Можете да изготвите списък по-долу:

List<Subject> newSubjects;
while ((obj = (Subject)objIn.readObject()) != null) {
newSubjects.add(obj);
}