需求:把对象按照流一样的方式操作。对象流。序列化流。
序列化:把对象按照流一样的方式操作。
反序列化:把文件中的流对象的数据还原成对象。
序列化:
ObjectOutputStream
public final void writeObject(Object obj)
反序列化:
ObjectInputStream
public final Object readObject()
java.io.NotSerializableException
public static void main(String[] args) throws IOException,ClassNotFoundException {
// write();//序列化
read();//反序列化
}
private static void read() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"oos.txt"));
// public final Object readObject()
Object obj = ois.readObject();
ois.close();
System.out.println(obj);
}
private static void write() throws IOException {
// 创建序列化流对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"oos.txt"));
Person p = new Person("林青霞", 27);
// public final void writeObject(Object obj)
oos.writeObject(p);
oos.close();
}
- 创建person对象
/*
* 类通过实现 java.io.Serializable 接口以启用其序列化功能。
* 未实现此接口的类将无法使其任何状态序列化或反序列化。
*
* 注意:
* 以后,你可能会看到有些接口或者抽象类中没有任何抽象方法。作用很简单:其实仅仅是起到了一个标记作用。
* /
public class Person implements Serializable {
private static final long serialVersionUID = -6331577188740944629L;
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}