1.java中程序执行完毕后销毁对象是合理且必须的,这些对象的声明周期不会比JVM得声明周期更长。但有时我们希望即使JVM不启动,该对象仍可使用,此处便用到了序列化。
使用java序列化,将对象保存为一组字节,使用时,再将这些字节组装成对象。其中,对象序列化保存的是对象的“状态”,即它的成员变量。
2.简单demo
public enum Gender {
MALE, FEMALE
}public class Person implements Serializable{
private String name = null;
private Integer age = null;
private Gender gender = null;
public Person() {
System.out.println("none-arg constructor");
}
public Person(String name, Integer age, Gender gender) {
System.out.println("arg constructor");
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Override
public String toString() {
return "[" + name + ", " + age + ", " + gender + "]";
}
}public class SimpleSerial {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file = new File("person.out");
ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file));
Person person = new Person("John", 101, Gender.MALE);
oout.writeObject(person);
oout.close();
ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
Object newPerson = oin.readObject(); // 没有强制转换到Person类型
oin.close();
System.out.println(newPerson);
}
}输出结果:
注意:当重新读取被保存的Person对象时,并未调用Person的任何构造器,看起来像是直接使用字节将Person对象还原出来的。
7155

被折叠的 条评论
为什么被折叠?



