序列化:
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。
下面三种情况下需要进行序列化:
1 . 把内存中的对象状态保存到一个文件或者数据库中的时候。
2 . 用套接字在网络上传送对象的时候。
3 . 通过RMI(远程方法调用)传输对象的时候。
序列化与反序列化的过程就是对象写入字节流和从字节流中读取对象。
大部分的类对象只需实现java.io.Serializable接口即可,不需要在类中增加任何代码。
一个简易版的测试Demo如下:
首先一个测试Student类:
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int 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 "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试代码如下:
import java.io.*;
import java.text.MessageFormat;
public class SerializableDemo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Student stu =new Student();
stu.setAge(20);
stu.setName("DuGuQiuBai");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
new File("E:/Student.txt")));
oos.writeObject(stu);
System.out.println("Student对象序列化成功!");
oos.close();
Student s = DeserializeStudent();
System.out.println(MessageFormat.format("name={0},age={1}",
s.getName(), s.getAge()));
}
private static Student DeserializeStudent() throws Exception, IOException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
new File("E:/Student.txt")));
Student stu = (Student) ois.readObject();
System.out.println("Student对象反序列化成功!");
return stu;
}
}
关于代码的一点补充,序列化后保存的文件名可以自定义,无论操作系统是否能识别,用. abc 后缀代替 .txt仍然可行。