package cn.itcast_07;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/*
* 序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。对象 -- 流数据(ObjectOutputStream)
* 反序例化流:把文本文件中的流数据或者网络中的流对象数据还原成对象。流数据 -- 对象(ObjectInputStream)
*/
public class ObjectStreamDemo {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
// 由于我们要对对象进行序列化,所以我们先定义一个类
// 序列化数据其实就是把对象写到文本文件
// write();

read();
}

public static void read() throws IOException, ClassNotFoundException {
// 创建反序列化流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"oos.txt"));

// 读取文本文件数据还原对象
Object obj = ois.readObject();

// 释放资源
ois.close();

System.out.println(obj.toString());
}

public static void write() throws IOException {
// 创建序列化对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"oos.txt"));

// 创建对象
Person p = new Person("刘德华", 45);

// 把对象写入文本文件
oos.writeObject(p);

// 释放资源
oos.close();
}
}


package cn.itcast_07;

import java.io.Serializable;

/*
* NotSerializableException:未序列化异常。
*
* 类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。
* 该接口没有任何方法,类似与这种没有方法的接口被称为标记接口。
*/
public class Person implements Serializable {
private String name;
private int age;

public Person() {
super();
// TODO Auto-generated constructor stub
}

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 != null ? "name=" + name + ", " : "")
+ "age=" + age + "]";
}

}