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 }