eofExeption с объектным потоком и хэш-картой

поэтому у меня проблема с сохранением или загрузкой хэш-карты из потока объектов. Файл сохранен, и я вижу, что он хранит какую-то информацию. проблема в том, что когда я пытаюсь прочитать хэш-карту, это дает мне ошибку EOF. Заранее спасибо за вашу помощь.

public synchronized void store(StoredObject storedObject) {

    try {
        String objectName = storedObject.getObject().getClass().getName();

        File file = new File(LOCAL_STORAGE_PATH + objectName);
        boolean isNewFile = !file.exists();


        output = new ObjectOutputStream(new FileOutputStream(file));
        input = new ObjectInputStream(new FileInputStream(file));
        if (isNewFile) {
            localStorage = new HashMap<String, StoredObject>();
        } else {
            /////////////////////////
            ////does not work ///////
            /////////////////////////
            localStorage = (HashMap) input.readObject();
        }


        localStorage.put(storedObject.getKey(), storedObject);

        output.writeObject(localStorage);;
        output.flush();

    } catch (IOException ex) {
        //Logger.getLogger(LocalServer.class.getName()).log(Level.SEVERE, "ioexception", ex);
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(LocalServer.class.getName()).log(Level.SEVERE, "class missmatch", ex);
    }
    finally{
         try {
            output.close();
            input.close();
        } catch (IOException ex1) {
            Logger.getLogger(LocalServer.class.getName()).log(Level.SEVERE, "could not close connection", ex1);
        }
    }

}

сообщение об ошибке:

java.io.EOFException в java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2601) в java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319) в java.io.ObjectInputStream.readObject(ObjectInputStream.java: 371) в ServiceLayer.LocalServer.LocalServer.store(LocalServer.java:66) в ServiceLayer.LocalServer.LocalServerTEST.main(LocalServerTEST.java:17)

материал, который я пробовал: сделать его синхронизированным. Объект (StoredObject) и подобъекты реализуют сериализуемость.


person Kim Ramgaard    schedule 27.11.2014    source источник


Ответы (1)


У вас есть код вывода и ввода, смешанный вместе. Вы создаете потоки вывода и ввода одновременно. Когда вы вызываете new FileOutputStream(file), он заменяет существующий файл, поэтому, когда вы пытаетесь его прочитать, он оказывается пустым.

Переместите свой выходной и входной код в два разных метода.

person Boann    schedule 27.11.2014