JavaSE-19.2.4【IO特殊操作流之标对象序列化流、对象反序列化流】

 1 package day10.lesson2.p1;
 2 
 3 import java.io.FileOutputStream;
 4 import java.io.IOException;
 5 import java.io.ObjectOutputStream;
 6 
 7 /*
 8 2.6 对象序列化流
 9 
10     对象序列化介绍
11         对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象
12         这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息
13         字节序列写到文件之后,相当于文件中持久保存了一个对象的信息
14         反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化
15 
16     对象序列化流: ObjectOutputStream
17         将Java对象的原始数据类型和图形写入OutputStream。
18         可以使用ObjectInputStream读取(重构)对象。
19         可以通过使用流的文件来实现对象的持久存储。
20         如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象
21 
22     构造方法
23         ObjectOutputStream(OutputStream out)    创建一个写入指定的OutputStream的ObjectOutputStream
24 
25     序列化对象方法
26         void writeObject(Object obj) 将指定的对象写入ObjectOutputStream
27         PS:Object表示所有对象
28 
29     注意事项
30         一个对象要想被序列化,该对象所属的类必须必须实现Serializable 接口
31         Serializable是一个标记接口,实现该接口,不需要重写任何方法
32  */
33 public class ObjectOutputStreamDemo {
34 
35     public static void main(String[] args) throws IOException {
36         ObjectOutputStream oos = new ObjectOutputStream(
37                 new FileOutputStream("stage2\\src\\day10\\lesson2\\p1\\oos.txt")
38         );
39 
40         Student student = new Student("张三", 18);
41 
42         oos.writeObject(student);
43         oos.close();
44         //Exception in thread "main" java.io.NotSerializableException: day10.lesson2.p1.Student
45         //类Student需要实现接口,不然报以上异常
46     }
47 
48 }
 1 package day10.lesson2.p1;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Student implements Serializable { //对象需要序列化/反序列化时必须要实现Serializable接口
 6 
 7     private String name;
 8     private int age;
 9 
10     public Student() {
11     }
12 
13     public Student(String name, int age) {
14         this.name = name;
15         this.age = age;
16     }
17 
18     public void setName(String name) {
19         this.name = name;
20     }
21 
22     public void setAge(int age) {
23         this.age = age;
24     }
25 
26     public String getName() {
27         return name;
28     }
29 
30     public int getAge() {
31         return age;
32     }
33 }

oos.txt

�� sr day10.lesson2.p1.Studentx�sۥR� I ageL namet Ljava/lang/String;xp   t 张三

  

 1 package day10.lesson2.p1;
 2 
 3 import com.sun.org.apache.bcel.internal.generic.NEW;
 4 
 5 import java.io.FileInputStream;
 6 import java.io.IOException;
 7 import java.io.ObjectInputStream;
 8 
 9 /*
10 2.7 对象反序列化流
11 
12     对象反序列化流:
13         ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象
14 
15     构造方法
16         ObjectInputStream(InputStream in) 创建从指定的InputStream读取的ObjectInputStream
17 
18     反序列化对象方法
19         Object readObject() 从ObjectInputStream读取一个对象
20  */
21 public class ObjectInputStreamDemo {
22 
23     public static void main(String[] args) throws IOException, ClassNotFoundException {
24         ObjectInputStream ois = new ObjectInputStream(
25                 new FileInputStream("stage2\\src\\day10\\lesson2\\p1\\oos.txt")
26         );
27 
28         Object object = ois.readObject();
29 
30         Student student = (Student) object; //向下转型,强转
31         System.out.println(student.getName() + "," + student.getAge()); //张三,18
32     }
33 
34 }

 

posted @ 2021-06-08 13:35  yub4by  阅读(46)  评论(0编辑  收藏  举报