Исключение EOFException с ObjectInputStream

#java #netbeans #deserialization #objectinputstream #eofexception

#java #netbeans #десериализация #objectinputstream #исключение eofexception

Вопрос:

Я читал другие вопросы, подобные этому, но не очень помог. Итак, у меня есть некоторое сериализованное содержимое в файле, и я пытаюсь прочитать его и распечатать на консоли, содержимое печатается нормально, но в конце отображается исключение EOFException. Есть ли какой-либо способ исправить мой код, чтобы избежать этого исключения?

 try {
            File file = new File("EnrolledStudentsSerial.txt");
 
            FileInputStream fi = new FileInputStream(file);
            ObjectInputStream input = new ObjectInputStream(fi);
            while(true) {
                System.out.println(input.readObject());
            }
        } 
        catch (IOException | ClassNotFoundException e) {
            System.out.println("Error: "   e); 
        }
 

Ответ №1:

Я не думаю, что вы хотите «избежать» этого исключения.

Вам нужно знать, когда вы дойдете до конца ввода, а исключение EOFException — это то, что говорит вам, что вы дошли до конца ввода.

Скорее, вы хотите перестать рассматривать это как условие ошибки, поскольку это не ошибка, это нормально и ожидаемо.

 try {
   … code as before … 
} 
catch (EOFException e) {
   // end of input, nothing to do here
}
catch (IOException | ClassNotFoundException e) {
    System.out.println("Error: "   e); 
}