¿Cómo evitar que InputStream.readObject () lance EOFException?

Yo serializo un objeto y lo guardo como un archivo en mi HDD. Cuando lo estoy leyendo, en solo algunas ocasiones tira.EOFException. Después de un par de horas de depuración no puedo encontrar un problema.

Aquí está mi 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 obtener 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 at java.io.ObjectInputStream $ BlockDataInputStream.peekByte (ObjectInputStream.java:2498) en java.io.ObjectInputStream.readbc. 348) en java.util.LinkedList.readObject (LinkedList.java:776) en sun.reflect.GeneratedMethodAccessor583.invoke (Fuente desconocida) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodApccccccc). .Method.invoke (Method.java:585) en java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:946) en java.io.ObjectInputStio.za.pcaza de jardín. ObjectInputStream.java:1719) en java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1305) en java.io.ObjectInputStream.defaultReadFunny.png. ) en java.io.ObjectInputStream.readOrdinaryObject ( ObjectInputStream.java:1719) en java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1305) en java.io.ObjectInputStream.readObject (ObjectInputStream.java:348)

Pregunta: Mi objeto serializado ahora está corrompido y entonces ¿es basura ahora?
Porque este objeto es responsable de representar la IU que guardó el usuario. Si el usuario inicia sesión, debe mostrar el estado de la IU guardado previamente. Sin embargo, para algunos usuarios el archivo no puede ser deserializado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta