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

流操作java.io.EOFException求解释
[b][/b]错误:
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at Test.js(Test.java:37)
源程序:
public static Integer js() throws FileNotFoundException, IOException, ClassNotFoundException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("num.txt"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("num.txt"));
Object o;
//oos.writeObject(new Integer(2));
Integer i = 0;
o = ois.readObject();
if(o instanceof Integer){
i = (Integer)o;
i++;
oos.writeObject(i);
}
return i;
}
加上红色的代码是可以,但注释掉后就抛出例外,在网上找了很多文章,可还是解释不通,求高手赤脚。。。。。。

------解决方案--------------------
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("num.txt"));
不论之前num.txt中是否有内容,这行代码会把num.txt截短成4个字节,准备后续的写入。
此时,如果没有oos.writeObject()来先写入一个Object到文件中,ois.readObject()是读不到内容的,不但读不到,而且会抛出EOFException,因为一直读到文件尾部预想的内容也没出现。
而如果先执行了oos.writeObject(),则文件中已经有了内容,自然ois.readObject()就能顺利执行不报异常了。