Person类:
package day22_IO;
/*
* NotSerializableException:未序列化异常
*
* 类通过实现java.io.Serializable接口以启用其序列化功能。
* 未实现此接口的类将无法使其任何状态序列化或反序列化
* 该接口居然没有任何方法,类似于这种没有方法的接口被称为标记接口
*
* 注意:
* 我一个类中可能有很多的成员变量,有些我不想进行序列化,请问该怎么办?
* 使用transient关键字声明不需要序列化的成员变量即可。
* */
import java.io.Serializable;
public class Person implements Serializable {
/**
* 添加序列化Uid,防止修改,程序报错
*
* 看到类实现了序列化接口的时候,要想解决黄色警告线的问题,就可以自动产生一个序列化id的值
* 而且产生这个值以后,我们对类进行任何的改动,它读取的数据时没有问题的
*/
private static final long serialVersionUID = 847108459653509398L;
private String name;
// private transient int age;//该成员变量不会被序列化
private int age;
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;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
测试类:
package day22_IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/*
* 序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。对象 -- 流(ObjectOutputStream)
* 反序列化流:把文本文件的流对象数据或者网络中的流对象还原成对象。流 -- 对象(ObjectInputStream)
* */
public class ObjectStreamDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// TODO Auto-generated method stub
//由于我们需要对对象序列化,所以我们先自定一个类
//序列化数据其实就是把对象写入到文件
write();
//读取序列化文件
read();
}
private static void read() throws IOException, ClassNotFoundException {
// TODO Auto-generated method stub
//创建反序列化文件
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"));
//还原对象
Object obj = ois.readObject();
//释放资源
ois.close();
//输出对象,默认调用的toString方法
System.out.println(obj);
}
private static void write() throws IOException {
// TODO Auto-generated method stub
//创建序列化对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
//创建对象
Person p1 = new Person("林青霞", 27);
//写入序列化文件中
oos.writeObject(p1);
//释放资源
oos.close();
}
}