有时候需要将对象保存到磁盘文件或者网络信息中,保存对象的过程实质上就是对象的持久化过程,对象持久化也就是记录对象的状态以便将来具有再生的能力。JAVA提供了对象流以实现对象的输入与输出,也就是对象持久化。
需要注意的是,在使用对象流之前必须将该对象序列化。所谓对象序列化就是将对象的状态转换成字节流,并且以后可以通过这些值再生相同状态的对象。简单来说,序列化就是一种用来处理对象流的机制,而对象流也就是将对象的内容进行流化,我们可以对流化后的对象进行读写操作,也将流化的对象传输与网络间。
完整例子
/**************************Person.java***********************/
public class Person implements Serializable {
String name;
transient int age; //被transient修饰的变量将不会被保存
String major;
public Person(String name,int age,String major) {
this.name=name;
this.age =age;
this.major=major;
}
public String toString(){
return "Name: "+this.name+", Age: "+this.age+", Major: "+this.major;
}
}
/**************************SerializableDemo.java*************/
public class SerializableDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person person=new Person("melon",16,"computer Science");
Person tmp=null;
try {
FileOutputStream fos=new FileOutputStream("data.dat");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(person);
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
FileInputStream fis =new FileInputStream("data.dat");
ObjectInput ois=new ObjectInputStream(fis);
tmp=(Person)ois.readObject();
System.out.println(tmp.toString());
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
程序运行结果:Name: melon, Age: 0, Major: computer Science
人的年龄属于个人隐私,本程序中Person类的成员变量age被transient关键字修饰,这样持久化Person对象时,他的age属性就不会保存。