/ / Клас Cast виняток під час читання списку з файлу - Java, серіалізація, кастинг

Виключення класу Cast при читанні списку з файлу - java, serialization, casting

Я намагаюся зберегти стан своїх предметів у файлі.У мене є перелік тем, і я записую їх у файл. І я прочитав об'єкт назад. Але коли я додаю їх до списку, я отримую виняток класу. Я бачу, що об'єкт повертається з усіма значеннями, але не може передати їх у список.

Це мій список предметів

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 (Невідоме джерело)

Я щось роблю не так? Я багато гуглив, але виявив правильність синтаксису. Будь-яка допомога буде вдячна.

Відповіді:

1 для відповіді № 1

Я думаю, проблема полягає в тому, що ви "додаєте файл, замість того, щоб писати новий вміст. Якщо якийсь об'єкт раніше був серіалізований, а потім ви серіалізуєте List<Subject> додавши файл, тоді після десериалізації ви отримаєте старий об’єкт.

Спробуйте видалити логічний аргумент із виклику конструктора FileOutputStream:

FileOutputStream fileStream = new FileOutputStream("SaveFile");

замість

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

-1 для відповіді № 2

Як obStream.readObject (); повертає об'єкт, а не список об'єктів. Ви можете підготувати список, як показано нижче:

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