简介
- 这个流是为了
传输对象
而生的- 对象序列化:把java对象写入到文件中
- 对象反序列化:把文件中的对象读出来
继承体系
- ObjectInputStream:把文件中的对象读出来
- ObjectOutputStream:把java对象写入到文件中
常用API
示例
- 实体类必须
实现序列化接口
- 这其实就是一个声明式的接口,毛都不用实现
import java.io.Serializable;// 实现序列化接口
public class Student implements Serializable {private String name;private int age;private double score;// 此处省略1万行代码
}
序列化:
- writeObject:写一个对象即可
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test11.txt"))) {// 创建对象Student s = new Student("张三", 18, 99.5);// 序列化对象oos.writeObject(s);} catch (Exception e) {throw new RuntimeException(e);}
下面不是乱码,代表序列化成功,这只是一种
特殊的存储方式
反序列化
反序列化的API
- 序列化不是目的,反序列化才是
序列化和反序列化的双重操作,就实现了对象的传输
代码示例
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test11.txt"));ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test11.txt"));) {// 创建对象Student s = new Student("张三", 18, 99.5);// 序列化对象oos.writeObject(s);// 反序列化对象Student s1 = (Student) ois.readObject();System.out.println(s1);} catch (Exception e) {throw new RuntimeException(e);}
如果有些秘密数据数据不想参与序列化,使用关键字
transient
private transient String password; // transient关键字修饰的字段不会被序列化
序列化多个对象
- 多个对象,可以使用
ArrayList
,ArrayList已经实现了Serializable