通过ObjectInputStream

时间:2016-01-24 16:54:44

标签: java serialization eofexception

编写一段简单的代码顶部序列化标准员工对象,并在不同类的同一台机器上反序列化它。两个程序都编译并执行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)

谢谢。

1 个答案:

答案 0 :(得分:3)

您没有将Employee对象写入ObjectOutputStrem,因此添加

oout.writeObject(e);