日期:2014-05-20  浏览次数:20685 次

很简单的序列化程序,抛出io.EOFException 异常
大家好,我写了一个很简单的序列化程序,该程序把一个整数写入文件,再从该文件读出这个整数,可却跑出了OFException异常:
Java code

import java.io.*;
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        ObjectOutputStream oos = new ObjectOutputStream(
                                new FileOutputStream("test.dat"));
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.dat"));
        oos.writeInt(250); //向文件写入一个整数
        System.out.println(""+ois.readInt()); 从文件读出
    }
}



抛出了如下异常:
---------- java ----------
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2793)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:968)
at Test.main(Test.java:11)

查找文档,获知造成错误的原因,可能是在ois.readInt()操作之前文件指针就已经到达了尾部(事实上我在该操作之前使用ois.available() 检查过,确实是返回 0 )
很疑惑,为什么才刚开始读取,就已经到达了尾部呢?该怎么修改才能正常读取?
万分感激!

------解决方案--------------------
读和写 如果是同一个文件的话,不要同时打开。

写好了,oos.close了。 再new ObjectInputStream