import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectInputOutputDemo {
public static void main(String[] args) throws IOException {
/* Stu stu=new Stu("xiao hong",30); ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("H:\\test1.txt")); oos.writeObject(stu); oos.close();*/ ObjectInputStream ois=new ObjectInputStream(new FileInputStream("H:\\test1.txt")); try { Stu stu=(Stu)ois.readObject(); System.out.println(stu); System.out.println(stu.aaa); stu.sing(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
class Stu implements Serializable{
/** * */ private static final long serialVersionUID = 1L;
// public final static float serialVersionUID = 7920913767168547445f; private String name; private int age; private String abc="abc";//反序列化后又加入的属性,反序列化对象中默认这个属性默认值为null。 public int aaa=100;//反序列化后,又加入的属性。 这样用反序列化的对象调用这个属性时,,结果为0. //说明反序列化时,如果原对象添加了对象。而反序列化对象中原本无这个对象,会添加上这个对象。但是设置的值为0. public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } Stu(String name,int age){ this.name=name; this.age=age; } public String toString(){ return name+"--"+age; } //反序列化后又加入的方法。反序列化对象可以调用这个方法。 //前面 Stu stu时,调用了Stu这个类,应该立刻产生了Stu类对象。这个对象里面方法区已经设定好了。 //如果反序列号对象的序列号,和Stu类对象序列号一致。则认为是类的对象。 这个反序列对象就可以调用这个类的方法。 //也可以调用原本对象不存在的属性。但是初始值为属性类型的默认值。 public void sing(){ System.out.println("dinglingling…………"+abc); }
} |
|