序列化和反序列化
序列化
概念
是指把程序中的Java对象 ,输出 ,永久的保存在磁盘中。用来在多个服务器直接传输Java对象的信息。
需要使用工具类ObjectOutputStream完成序列化。
构造方法
- ObjectOutputStream(OutputStream out) 含参构造
普通方法
void writeObject(Object obj) //将指定的对象写入 ObjectOutputStream。
反序列化
概念
是指把磁盘中,已经被序列化好的文件。读取,恢复到程序中的过程。
需要使用工具类ObjectInputStream完成反序列化。
构造方法
- ObjectInputStream(InputStream in) 含参构造
普通方法
Object readObject() // 从 ObjectInputStream 读取对象,读取序列化数据。
测试
如果你的文件,想要支持序列化,必须实现Serializable接口,算是开启了序列化功能.
NotSerializableException - 要序列化的某些对象不实现java.io.Serializable接口。
//这个类用来测试 序列化 反序列化
public class Test1_Seria {
public static void main(String[] args) {
method() ; //序列化
method2();//反序列化
}
//反序列化:把磁盘中已经序列化好的文件,读取,恢复成Java对象
public static void method2() {
try {
//创建反序列化对象
ObjectInputStream in = new ObjectInputStream(
new FileInputStream("D:\\iotest\\1.txt"));
//开始反序列化
Object obj = in.readObject();
System.out.println(obj);//Student [name=皮皮霞, age=22]
//释放资源
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//序列化:把Java对象, 输出 ,永久保存到磁盘中
public static void method() {
try {
Student s = new Student("皮皮霞",22);
//创建序列化对象
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("D:\\iotest\\1.txt")) ;
//开始序列化
out.writeObject(s);
//释放资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//创建Student
//1、如果你的文件,想要支持序列化,必须实现Serializable接口,算是开启了序列化功能
//否则:java.io.NotSerializableException: cn.tedu.io.Student
class Student implements Serializable{
//2、自动生成本文件的一个唯一标识,版本号id
private static final long serialVersionUID = 1L;
//构造方法
public Student() {}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
private String name ;
private int age ;
//set() get()
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;
}
//toString()
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}