A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在下面的代码中进行如下操作:
先注释掉代码2进行序列化,然后打开代码2注释掉代码1进行反序列化
在后一操作中报出以下异常
Exception in thread "main" java.io.EOFException
        at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at demos.DemoOfSeridizableInExtends.main(DemoOfSeridizableInExtends.java:27)


[Java] 纯文本查看 复制代码
package demos;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class DemoOfSeridizableInExtends implements Serializable{
	public static void main(String[] args) throws EOFException,FileNotFoundException, IOException, ClassNotFoundException {
		ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("demo/jas.dat"));
		
		//以下代码1
		DemoOfSeridizableInExtends  it=new DemoOfSeridizableInExtends();
		foo3 f3=it.new foo3();
		objectOutputStream.writeObject(f3);
		objectOutputStream.flush();
		objectOutputStream.close();
		//以上为代码1
		
		
		//以下为代码2
		ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream("demo/jas.dat"));
		foo3 f3out=(foo3) objectInputStream.readObject();//第二步这行报错了
		System.out.println(f3out);
		objectInputStream.close();
		//以上为代码2
	}
	class foo implements Serializable{
		String name;
		public foo(){
			System.out.println("foo___");
		}
	}
	class  foo1 extends foo{
		public foo1(){
			System.out.println("foo1___");
		}
	}
	class foo2 extends foo1 implements Serializable{
		public  foo2() {
			System.out.println("foo2___");
		}
	}
	class foo3 extends foo2 {
		
		public  foo3() {
			this.name="jj";
			System.out.println("foo3:"+this.name);
			
		}
		@Override
		public String toString() {
			return "foo3 ["+"name="+name+"]";
		}
	}
}

1 个回复

倒序浏览
内部类BlockDataInputStream.的方法peekByte抛出的异常,意思就是到达了文件的末尾,程序却没有正常结束读取文件内容,你可以单步调试一下看看到达文件末尾之后程序为什么没有停下来


我也第一次看到这个异常。学习了。上面为百度所查
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马