import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* 对象序列化:对象-->文件
* 将对象转换为字节流保存起来,并在以后还原这个对象。
*
* 将一个对象保存到永久存储设备上称为持久化。
*
* 一个对象要先实现序列化必须实现Serializable或Externalizable接口
*
* Serializable该接口中没有实现任何方法,是一个标识性接口(Marker Interface)。
*
* 序列化就是把一个对象的状态写入一个字节流的过程。
* 利用序列化可以实现将程序状态存到一个固定的存储域例如文件。
*
* 对象反序列化:文件-->对象
*
* 在序列化时,static变量是无法序列化的。
* 如果A包含了对B的引用,那么在序列化A的时候也会将B一并的序列化。
* 如果此时A可以序列化,B无法序列化,那么当序列化A的时候就会发生
* 异常,这时可以将对B的引用设为transient,该关键字表示该变量
* 不会被序列化
*/
public class SerializableTest {
public static void main(String[] args) throws Exception {
// Person p = new Person(22, "zhangsan", 34.2);
//
// FileOutputStream fos = new FileOutputStream("person.txt");
// ObjectOutputStream oos = new ObjectOutputStream(fos);
//
// oos.writeObject(p);
//
// oos.close();
FileInputStream fis = new FileInputStream("person.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Person p = (Person)ois.readObject();
System.out.println(p.getName());
}
}
class Person implements Serializable {
private static final long serialVersionUID = 6488776308805978891L;
private transient int age; //不会被序列化
private String name;
private double height;
public Person() {
}
public Person(int age, String name, double height) {
this.age = age;
this.name = name;
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}