java.io.EOFException при чтении объекта через ObjectInputStream

Написал простой фрагмент кода, который сериализует стандартный объект сотрудника и десериализует его на той же машине из другого класса. Обе программы скомпилировали и выполнили поток вывода Obj для создания сериализованного объекта.

Проблема в десериализации. Программа при запуске дает исключение EOF. Вот код, который я использую:

Сериализация-

    import java.io.*;
public class OOStreamDemo{

public static void main(String []a){

Employee e = new Employee("Abhishek Yadav", 'i', 10014);
FileOutputStream fout = null;
ObjectOutputStream oout = null;
try{
fout = new FileOutputStream("emp.ser");
oout = new ObjectOutputStream(fout);

} catch(Exception ex1){
System.out.println(oout);
    ex1.printStackTrace();

}


finally{

try{
oout.flush();
oout.close();
fout.close();
} catch(IOException ex2){
    ex2.printStackTrace();

}
}
}
}

Десериализовать -

   import java.io.*;
public class OIStreamDemo{
public static void main(String []a){

System.out.println("Inside main");

FileInputStream fin = null;
ObjectInputStream oin = null;
Employee emp;

try{
System.out.println("Inside try");
fin = new FileInputStream("emp.ser");
oin = new ObjectInputStream(fin);
System.out.println("Streams Initialized");
while((emp = (Employee)oin.readObject()) != null)
    {

System.out.println(emp.toString());
    }
System.out.println("Object read");
//System.out.println("Read object is " + emp);
//System.out.println("Obj props are "+ emp.name);

} catch(Exception e){

    e.printStackTrace();
}

}

}

Это printStackTrace:

Inside main
Inside try Streams
Initialized
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2598)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1318)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at OIStreamDemo.main(OIStreamDemo.java:16)

Спасибо.


person Abhi    schedule 24.01.2016    source источник


Ответы (1)


Вы не записали объект Employee в ObjectOutputStrem, поэтому добавьте

oout.writeObject(e);
person wero    schedule 24.01.2016
comment
Спасибо большое!! Я понял, что должен был быть более осторожным, когда писал код - person Abhi; 24.01.2016
comment
кто-нибудь может ответить на этот вопрос? stackoverflow .com/questions/37507890/ - person CraZyDroiD; 29.05.2016