将对象转为字节序列的过程叫做对象的序列化
将序列化的字节流恢复成对象,叫反序列化
应用场景:
- 永久性的保存对象
- 网络中传递序列化后的对象
- 进程中传递对象
要使定义的类支持序列化,只要实现Serializable接口即可,该接口不需要实现任何方法。
public class Test {
public static void main(String[] args) throws Exception {
Student student = new Student("张三",18);
FileOutputStream out = new FileOutputStream("H:/javaIOTest/file.txt");
ObjectOutputStream objOut = new ObjectOutputStream(out);
//写入序列化后的对象
objOut.writeObject(student);
objOut.close();
//读入序列化的对象,进行反序列化
FileInputStream in = new FileInputStream("H:/javaIoTest/file.txt");
ObjectInputStream objIn = new ObjectInputStream(in);
Student student2 = (Student)objIn.readObject();
System.out.println(student2); //已重写toString()方法
objIn.close();
}
}
H:/javaIOTest/file.txt文件中的内容:
sr com.gfd.day0821.Student镨彴?m I ageL namet Ljava/lang/String;xp t 寮犱笁
控制台输出:
name:张三 age:18
此外,还可以使用transient关键字使属性不参与序列化,以提高安全性,如将 name定义时写成: private transient String name;
则H:/javaIOTest/file.txt文件中的内容:
sr com.gfd.day0821.Student弨淪渣#m I agexp
控制台输出:
name:null age:18