一、序列化概述
Java 提供了一种对象 序列化 的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据、对象的类型 和 对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中 持久保存 了一个对象的信息。
反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。 对象的数据 、 对象的类型 和 对象中存储的数据信息,都可以用来在内存中创建对象。
图解序列化:
序列化和反序列化的概述:
二、ObjectOutputStream 类
三、ObjectInputStream 类
四、案例:序列化集合
题目:将存有多个自定义对象的集合序列化操作,保存到 list.txt 文件中 ,反序列化 list.txt ,并遍历集合,打印对象信息。
代码实现:
1 /*
2 分析:
3 1.定义一个存储Person对象的ArrayList集合
4 2.往ArrayList集合中存储Person对象
5 3.创建一个序列化流ObjectOutputStream对象
6 4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
7 5.创建一个反序列化ObjectInputStream对象
8 6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合
9 7.把Object类型的集合转换为ArrayList类型
10 8.遍历ArrayList集合
11 9.释放资源
12 */
13 public static void main(String[] args) throws IOException, ClassNotFoundException {
14 //1.定义一个存储Person对象的ArrayList集合
15 ArrayList<Person> list = new ArrayList<>();
16 //2.往ArrayList集合中存储Person对象
17 list.add(new Person("张三",18));
18 list.add(new Person("李四",19));
19 list.add(new Person("王五",20));
20 //3.创建一个序列化流ObjectOutputStream对象
21 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\list.txt"));
22 //4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
23 oos.writeObject(list);
24 //5.创建一个反序列化ObjectInputStream对象
25 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\list.txt"));
26 //6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合
27 Object o = ois.readObject();
28 //7.把Object类型的集合转换为ArrayList类型
29 ArrayList<Person> list2 = (ArrayList<Person>)o;
30 //8.遍历ArrayList集合
31 for (Person p : list2) {
32 System.out.println(p);
33 }
34 //9.释放资源
35 ois.close();
36 oos.close();
37 }