2014-01-15 5 views
-2

Я получаю следующее:EOFException при получении объекта Writer на serilized файл

java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) 
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
    at java.io.ObjectInputStream.<init>(Unknown Source) 
    at com.Temp.main(Temp.java:62) 

Ниже приведен код, который я пытаюсь запустить:

class Dog implements Serializable { 
    private static final long serialVersionUID = 1L; 
    int age = 0; 
    String color = "Black"; 
} 

public class Temp { 
    public static void main(String[] args) { 
     FileOutputStream fos; 
     ObjectOutputStream oos; 
     FileInputStream fis; 
     ObjectInputStream ios; 
     File doggy; 
     try { 
      Dog fluffy = new Dog(); 
      fos = new FileOutputStream("DOG_store.txt"); 
      oos = new ObjectOutputStream(fos); 
      oos.writeObject(fluffy); 
      fos.close(); 
      oos.close(); 

      doggy = new File("DOG_store.txt"); 
      FileWriter fw = new FileWriter(doggy); // **This is Causing ISSUE** 

      fis = new FileInputStream("DOG_store.txt"); 
      ios = new ObjectInputStream(fis); 
      Dog scrappy = (Dog) ios.readObject(); 
      fis.close(); 
      ios.close(); 
      System.out.println(scrappy.age + " " + scrappy.color); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } catch (ClassNotFoundException cfne) { 
      cfne.printStackTrace(); 
     } 
    } 
+0

Вы проверили, что файл 'doggy' создан или нет? – Babel

+0

«doggy» Файловый объект ссылается на уже созданный файл «DOG_store.txt» .... и да, этот файл создается. –

+0

Но вы даже не используете 'FileWriter fw' –

ответ

2

когда вы FileWriter fw = new FileWriter(doggy); открывает файл режиме записи и удаляет предыдущие данные файла. Вот почему whie читает файл, который он дает EOFException, потому что в файле ничего не читать.

Если вы делаете это так: FileWriter fw = new FileWriter(doggy,true);, то ошибки не будет, поскольку он не удаляет предыдущие данные файла.

+0

«Новый FileWriter» даже не используется, поэтому зачем предлагать решение на его основе? –

+0

@ user2310289 OP сказал: «Я хочу понять, что делает этот конструктор FileWriter, чтобы вызвать это исключение» –

+0

Хорошо, теперь я могу видеть очень глубоко похороненный комментарий. –