Java基础 序列化流、反序列化流

 

序列化流是高级流,也是用来包装基本流的

序列化流属于 字节流 的一种,负责输出数据;反序列化流负责输入数据

 

序列化流 可以把 Java 中的 对象 写到本地文件中。但是写到文件中的数据我们看不懂,可以通过反序列化流把数据正确读取出来

序列化流 也叫 对象操作输出流

 

 

序列化流:

构造方法:public  ObjectOutputStream (OutputStream  out)   →   把基本流包装成高级流

成员方法:public  final  void  writeObject (Object  obj)   →   把对象序列化(写出)到文件中去

 

序列化流的细节:

使用 对象输出流 将 对象 保存到文件时会出现 NotSerializableException 异常,需要让 Javabean 类实现 Serializable 接口

Serializable 接口里面是没有抽象方法的,像这种没有抽象方法的接口叫做 标记型接口。一旦实现了这个接口,那么就表示当前的 Javabean 类可以被序列化

 

eg:利用序列化流,把一个对象写到本地文件中

Student stu = new Student("张三", 23);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\Java基础资料\\b.txt"));
oos.writeObject(stu);
oos.close();

 

 

反序列化流(对象操作输入流):

反序列化流 可以把序列化到本地文件中的对象 读取到程序中来

 

反序列化流:

构造方法:public  ObjectInputStream (InputStream  out)   →   把基本流变成高级流

成员方法:public  Object  readObject ()   →   把序列化到本地文件中的对象 读取到程序中来;返回值就是读取到的对象,但是 是Object类型的,还需要强转一下

 

eg:把序列化到本地文件中的对象读取到程序中来

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\Java基础资料\\b.txt"));
Object o = ois.readObject();
System.out.println(o);
ois.close();

 

细节:一次 writeObject 方法只能写一个对象;一次 readObject () 方法也只能读 一个对象。如果要读取多个对象,就多写几次:

以读取为例:

ois.readObject();

ois.readObject();

ois.readObject();

但是太麻烦,所以如果说我们要把 多个对象 序列化到本地文件当中,可以先把这些对象放到一个 集合 当中,然后直接序列化 list 集合(以 ArrayList 为例):oos.writeObject (list)

读取的时候也读一次:ArrayList<Student>  list  =  (ArrayList<Student>) ois.readObject ()   →   等号右边做了个强转

ArrayList 本身也实现了 Serializable 接口,也有 serialVersionUID。

 

posted @ 2023-10-25 16:16  1stzz1  阅读(53)  评论(0)    收藏  举报