在下面的代码中进行如下操作:
先注释掉代码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+"]";
}
}
}
|