Jak zapobiec wprowadzaniu EOFException przez InputStream.readObject ()?

Serializuję obiekt i zapisuję go jako plik na moim dysku twardym. Kiedy to czytam, tylko w kilku przypadkachEOFException. Po kilku godzinach debugowania nie mogę znaleźć problemu.

Oto mój kod:

   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);
                }
            }

        }
    }

Aby uzyskać obiekt:

  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;
    }

Ślad stosu:

java.io.EOFException w java.io.ObjectInputStream $ BlockDataInputStream.peekByte (ObjectInputStream.java:2498) w java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1273) w java.io.ObjectInputStream.readObject (ObjectInputStream.java: 348) w java.util.LinkedList.readObject (LinkedList.java:776) w sun.reflect.GeneratedMethodAccessor583.invoke (Nieznane źródło) w sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) w java.lang.reflect .Method.invoke (Method.java:585) w java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:946) w java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1809) w java.io.ObjectInputStream.readOrdinaryObject ( ObjectInputStream.java:1719) w java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1305) w java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1908) w java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1832 ) w java.io.ObjectInputStream.readOrdinaryObject ( ObjectInputStream.java:1719) w java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1305) w java.io.ObjectInputStream.readObject (ObjectInputStream.java:348)

Pytanie: Mój serializowany obiekt jest teraz uszkodzony i czy teraz jest nieczysty?
Ponieważ ten obiekt jest odpowiedzialny za renderowanie interfejsu użytkownika zapisanego przez użytkownika. Jeśli użytkownik się zaloguje, powinien wyrenderować wcześniej zapisany stan interfejsu użytkownika. Jednak dla niektórych użytkowników pliku nie można deserializować.

questionAnswers(3)

yourAnswerToTheQuestion