Como evitar que InputStream.readObject () lance EOFException?

Eu serializo um objeto e salvá-lo como um arquivo no meu disco rígido. Quando eu estou lendo, em algumas ocasiões ele jogaEOFException. Após algumas horas de depuração, não consigo encontrar um problema.

Aqui está o meu código:

   public void serialize(MyClass myClass,String path) {
        FileOutputStream foStream = null;
        ObjectOutputStream ooStream = null;
        try {
            File file = new File(path);
            if (!file.exists()) {
                file.createNewFile();
            }
            foStream = new FileOutputStream(file);
            ooStream = new ObjectOutputStream(foStream);
            ooStream.writeObject(myClass);
        } catch (Throwable t) {
            log.error(t);
        } finally {
            if (ooStream != null) {
                try {
                    ooStream.flush();
                    ooStream.close();
                } catch (IOException e) {
                    log.error(e);
                }
            }

        }
    }

Para obter o objeto:

  public MyClass deSerialize(String path) {
        MyClass myClass=null;
        FileInputStream fiStream = null;
        ObjectInputStream oiStream = null;
        String errorMessage = "";
        try {
            File file = new File(path);
            if (!file.exists()) {
                return null;
            }
            fiStream = new FileInputStream(path);
            oiStream = new ObjectInputStream(fiStream);
            Object o = oiStream.readObject();
            myClass = (MyClass) o;
        } catch (Throwable t) {
            log.warn(t);
        } finally {
            if (oiStream != null) {
                try {
                    oiStream.close();
                } catch (IOException e) {
                    log.error(e);
                }
            }
        }
        return myClass;
    }

Stacktrace:

java.io.EOFException em java.io.ObjectInputStream $ BlockDataInputStream.peekByte (ObjectInputStream.java:2498) em java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1273) em java.io.ObjectInputStream.readObject (ObjectInputStream.java: 348) em java.util.LinkedList.readObject (LinkedList.java:776) em sun.reflect.GeneratedMethodAccessor583.invoke (Unknown Source) em sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) em java.lang.reflect .Method.invoke (Method.java:585) em java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:946) em java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1809) em java.io.ObjectInputStream.readOrdinaryObject ( ObjectInputStream.java:1719) em java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1305) em java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1908) em java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1832 ) em java.io.ObjectInputStream.readOrdinaryObject ( ObjectInputStream.java:1719) em java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1305) em java.io.ObjectInputStream.readObject (ObjectInputStream.java:348)

Questão: Meu objeto serializado está corrompido e agora é lixo agora?
Porque esse objeto é responsável por renderizar a interface do usuário que foi salva pelo usuário. Se o usuário efetuar login, deverá renderizar o estado da interface do usuário salvo anteriormente. No entanto, para alguns usuários, o arquivo não pode ser desserializado.

questionAnswers(3)

yourAnswerToTheQuestion