invalid type code:AC

258
26 октября 2019, 08:50

Пробую сериализовать обьект. Идея такая: Есть класс HA(что-то типа человека) у него есть поля 1)Имя 2)Что делает 3)Id 4)Дата и есть методы 1)write 2)read Когда я пытаюсь считать второй обьект из файла то собственно в методе read вылетает исключение "java.io.StreamCorruptedException: invalid type code: AC"

Вот класс HA:

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import static java.lang.System.out;
import java.io.Serializable;
public class HA implements Serializable {

    private String name; //Имя
    private String work; //Дело
    private String date; //Дата
    private int id; //номер записи 
    private String getDate() { //Получение даты в формате дд.мм.гг
        Date currentDate = new Date();
        SimpleDateFormat dateFormat =  new SimpleDateFormat();
        return dateFormat.format(currentDate).toString();
    }

    public HA (String name,String work,int id) { //Конструктор 
        this.name = name;
        this.work = work;
        this.date = getDate(); 
        this.id = id; 
    }
    public void display(HA ha) {
        out.println("---------------------");
        out.println("id:"+ha.id);
        out.println("Кто:"+ha.name);
        out.println("Что:"+ha.work);
        out.println("Когда:"+ha.date);
        out.println("---------------------");
    }


}

А вот и методы с main:

import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.io.EOFException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;

public class Ser1 {
   static String PATH="IO4.txt";
    public static void main(String[] args) throws Exception {
        write("Рик","Убрал мусор",13);
        read();
    }
    static void write(String name,String work,int id) throws Exception {
        try(FileOutputStream fos = new FileOutputStream(PATH,true);
            ObjectOutputStream oos = new ObjectOutputStream(fos);) {
            HA ha = new HA(name,work,id);
            oos.writeObject(ha);
            oos.flush();
        }catch (Exception e) {
            e.printStackTrace();
        }   
    }
    static void read() throws Exception {
        ArrayList<HA> List = new ArrayList<>();
        try (FileInputStream fis = new FileInputStream(PATH);
             ObjectInputStream ois = new ObjectInputStream(fis);) {

            while(true) {
                try{
                    List.add((HA) ois.readObject());
                }catch (EOFException e) {
                    break;
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        for (HA ha:List) {
            ha.display(ha);
        }
    }
}

Пробовал разные варианты,читал похожие,но не смог найти ответа. Помогите найти ошибку. Спасибо.

Answer 1
import java.io.Serializable;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    public class HA implements Serializable {
        private static final long serialVersionUID = 1L;
        private static final String DATE_FORMATTER_PATERN = "dd.MM.yyyy";
        private final String name; //Имя
        private final String work; //Дело
        private final LocalDate date; //Дата
        private final int id; //номер записи 
        public HA(int id, String name, String work) { //Конструктор 
            this.id = id;
            this.name = name;
            this.work = work;
            this.date = LocalDate.now();
        }
@Override
public String toString() {
    return new StringBuilder()
            .append("\r\n---------------------")
            .append("\r\nid:").append(id)
            .append("\r\nКто:").append(name)
            .append("\r\nЧто:").append(work)
            .append("r\nКогда:").append(date.format(DateTimeFormatter.ofPattern(DATE_FORMATTER_PATERN)))
            .append("\r\n---------------------")
            .toString();
}
    }
    import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.util.List;
public class Ser1 {
    static String PATH = "IO4.txt";
    public static void main(String[] args) throws Exception {
        List<HA> list = new ArrayList<>();
        list.add(new HA(13, "Рик", "Убрал мусор"));
        write(list);
        System.out.println(read());
    }
    static void write(final List<HA> list) throws Exception {
        try (ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(PATH)))) {
            oos.writeObject(list);
            oos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    static List<HA> read() throws Exception {
        try (ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(PATH)))) {
            return (List<HA>) ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
READ ALSO
java как сделать таймер [закрыт]

java как сделать таймер [закрыт]

Я хотел бы чтоб проще говоря у меня был таймер который после 1 минуты выполнял часть кода , допустим прибавлял к одной переменной еще 5 , и после...

158
Период у вещественных чисел

Период у вещественных чисел

Поддерживается ли в java бесконечные периодические дроби? Например, что будет при делении 86 на 30?

124
Сложный GridView / RecyclerView с картинками

Сложный GridView / RecyclerView с картинками

Есть данные в базе и с помощью их нужно создать GridView или RecyclerView не важно (суть одна что бы список был сортирован по категориям как на картинке...

174
JavaFx WebView, как увидеть ошибки в консоли

JavaFx WebView, как увидеть ошибки в консоли

Использую JavaFx WebView, не могу разобраться как увидеть ошибки, которые показываются в консоли браузера, если я открываю страницу через Google Chrome,...

209