JAVA之对象序列化
介绍
当我们写完的java程序在运行起来时,它会在内存中创建多个对象,但是当程序运行结束后,这些对象也随之消失了,若我们希望永久的保存这些对象,则可以将对象转为字节数据写入到硬盘上,这个操作称之为对象序列化。在JAVA中提供了ObjectOutputStream(对象输出流)来实现对象的序列化,相应的ObjectinputStream实现对象的反序列化。
Demo
下面通过一个简单的例子,来学习Java中的序列化以及反序列化。将Person对象序列化,保存到硬盘上,然后反序列化,读取对象信息。
import java.io.*;
/** * Created by yuquanle on 2018/3/1. */
public class SerialTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Person p = new Person("xx",17);
SerialTest.SerialMethod(p);
//SerialTest.UnSerialMethod();
}
//序列化方法
public static void SerialMethod(Person p) throws IOException {
//创建文件输出流对象,将数据序列化到objectStream文件
FileOutputStream fos = new FileOutputStream("objectStream.txt");
//创建对象输出流对象,用于处理输出流对象写入的数据
ObjectOutputStream oos = new ObjectOutputStream(fos);
//将数据序列化到输出流中
oos.writeObject(p);
}
//反序列化方法
public static void UnSerialMethod() throws IOException, ClassNotFoundException {
//创建文件输入流对象,读取指定文件
FileInputStream fis = new FileInputStream("objectStream.txt");
//创建对象输入流,并且从指定的输入流中读取数据
ObjectInputStream ois = new ObjectInputStream(fis);
//从objectStream.txt读取Person对象
Person p = (Person)ois.readObject();
System.out.println(p.getName());
}
static class Person implements Serializable{
private String name;
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;
}
}
}
注意:当对象序列化时,必须保证改对象实现Serializable接口,否则程序会出现NotSerializableException异常。