Java 之 序列化流 一、序列化概述 二、ObjectOutputStream 类 三、ObjectInputStream 类 四、案例:序列化集合

Java 之 序列化流
一、序列化概述
二、ObjectOutputStream 类
三、ObjectInputStream 类
四、案例:序列化集合

  Java 提供了一种对象 序列化 的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据、对象的类型 对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中 持久保存 了一个对象的信息。

  反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化对象的数据 对象的类型 对象中存储的数据信息,都可以用来在内存中创建对象。
  图解序列化

Java 之 序列化流
一、序列化概述
二、ObjectOutputStream 类
三、ObjectInputStream 类
四、案例:序列化集合

  序列化和反序列化的概述

Java 之 序列化流
一、序列化概述
二、ObjectOutputStream 类
三、ObjectInputStream 类
四、案例:序列化集合

二、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     }