//下面程序的目的是实现对像的序列化。程序运行时先看obj.txt文件中有没有以前保存的文件,如果没有的话就new 一个对像并写入obj.txt中。最后读出obj.txt中的对像并输出,但是运行时为什么会出现EOFException呢?
import java.io.*;
public class SerializableTest implements Serializable
{
String str;
public SerializableTest(String str)
{
this.str=str;
}
public static void main(String[] args)
{
FileInputStream in=null;        FileOutputStream out=null;        ObjectInputStream oin=null;        ObjectOutputStream oout=null;
        
        SerializableTest temp=null,temp2=null;
        SerializableTest obj=new SerializableTest("hello");
try{
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);if((temp=(SerializableTest)oin.readObject())==null)
{
oin.close();
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
temp2=(SerializableTest)oin.readObject();
System.out.println(temp2.str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    因为你的文件是空的,或者是没有进行过对象序列化的文件,因此在进行oin=new ObjectInputStream(in);
    时会出错,因此你需要的判断是oin==null,而不是temp=(SerializableTest)oin.readObject())==null之类的。
    改成下面这样就可以了:import java.io.*;
    public class SerializableTest implements Serializable
    {
    String str;
    public SerializableTest(String str)
    {
    this.str=str;
    }
    public static void main(String[] args)
    {
    FileInputStream in=null;        FileOutputStream out=null;        ObjectInputStream oin=null;        ObjectOutputStream oout=null;
            
            SerializableTest temp=null,temp2=null;
            SerializableTest obj=new SerializableTest("hello");
            try{
                in=new FileInputStream("obj.txt");
                oin=new ObjectInputStream(in);
            }catch(EOFException e){
            }catch(Exception e){
                
            }
            
            try{            if(oin==null)
                {
                    out=new FileOutputStream("obj.txt");
                    oout=new ObjectOutputStream(out);
                    oout.writeObject(obj);
                    oout.close();
                }else{                
                in=new FileInputStream("obj.txt");
                oin=new ObjectInputStream(in);
                temp2=(SerializableTest)oin.readObject();
                System.out.println(temp2.str);
                }
            }catch(Exception e){
                e.printStackTrace();
            }
    }
    }
      

  2.   

    import java.io.*;
    public class SerializableTest implements Serializable
    {
    String str;
    public SerializableTest(String str)
    {
    this.str=str;
    }
    public static void main(String[] args)
    {
    FileInputStream in=null;        FileOutputStream out=null;        ObjectInputStream oin=null;        ObjectOutputStream oout=null;
            
            SerializableTest temp=null,temp2=null;
            SerializableTest obj=new SerializableTest("hello");
    try{
    File f = new File("obj.txt");
    if(f.exists()){
    in=new FileInputStream("obj.txt");
    oin=new ObjectInputStream(in);

    if((temp=(SerializableTest)oin.readObject())==null){
    oin.close();
    out=new FileOutputStream("obj.txt");
    oout=new ObjectOutputStream(out);
    oout.writeObject(obj);
    oout.close();
    }
    }


    in=new FileInputStream("obj.txt");
    oin=new ObjectInputStream(in);
    temp2=(SerializableTest)oin.readObject();
    System.out.println(temp2.str);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }
      

  3.   

    import java.io.*;
    public class SerializableTest implements Serializable
    {
    String str;
    public SerializableTest(String str)
    {
    this.str=str;
    }
    public static void main(String[] args)
    {
    FileInputStream in=null;        FileOutputStream out=null;        ObjectInputStream oin=null;        ObjectOutputStream oout=null;
            
            SerializableTest temp=null,temp2=null;
            SerializableTest obj=new SerializableTest("hello");
    try{
    File f = new File("obj.txt");
    if(f.exists()){
    in=new FileInputStream("obj.txt");
    oin=new ObjectInputStream(in);

    if((temp=(SerializableTest)oin.readObject())==null){
    oin.close();
    out=new FileOutputStream("obj.txt");
    oout=new ObjectOutputStream(out);
    oout.writeObject(obj);
    oout.close();
    }
    }
    else{
    out=new FileOutputStream("obj.txt");
    oout=new ObjectOutputStream(out);
    oout.writeObject(obj);
    oout.close();
    }

    in=new FileInputStream("obj.txt");
    oin=new ObjectInputStream(in);
    temp2=(SerializableTest)oin.readObject();
    System.out.println(temp2.str);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }