java IO(五)——序列化和反序列化

序列化和反序列化概念

java IO(五)——序列化和反序列化

objectoutputstream:对象的序列化流

java. io. objectOutputstream extends OutputStream
objectoutputstream:对象的序列化流
作用:把对象以流的方式写入到文件中保存

构造方法:

  • objectoutputstream(OutputStream out) 创建写入指OutputStream 的objectoutputstream.

参数:

  • OutputStream out :字节输出流

特有的成员方法:

  • void writeobject(object obj)将指定的对象写入objectOutputStream.

使用步骤:
1.创建objectoutputstream对象,构造方法中传递字节输出流
2.使用0bjec toutputStream对象中的方法writeObject,把对象写入到文件中
3.释放资源

实体类创建

java IO(五)——序列化和反序列化

demo

java IO(五)——序列化和反序列化

此时会抛出一个异常,没有序列化异常

java IO(五)——序列化和反序列化

public interface Serializable

类通过实现java. io. Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型
本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

实现序列化接口

java IO(五)——序列化和反序列化

序列化和反序列化的时候,会抛出NotSerializableExcept ion没有序列化异常
类通过实现java. io. Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。
Serializable接口也叫标记型接口,要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记
当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记

  • 有:就可以序列化和反序列化

  • 没有:就会抛出NotSerializableException异常

    去市场买肉–>肉上有一个蓝色章(检测合格)–>放心购买–>买回来怎么吃随意

objectInputStream:对象的反序列化流

java. io. objectInputStream extends InputStream
objectInputStream:对象的反序列化流

作用:把文件中保存的对象,以流的方式读取出来使用

构造方法:

objectInputStream(InputStream in)创建从指定InputStream 读取的objectInputStream.

参数:

Inputstream in:字节输入流
特有的成员方法:
object readobject() 从objectInputStream 读取对象。

使用步骤:

1.创建objectInputStream对象,构造方法中传递字节输入流
2.使用objectInputStream对象中的方法read0bjec t读取保存对象的文件
3.释放资源
4.使用读职出来的对象(打印)

readobject方法声明抛出了ClassNotFoundExcept ion(class文件找不到异常)

反序列化的前提

1.类必须实现Serializable
2.必须存在类对应的class文件

java IO(五)——序列化和反序列化

transient关键字:瞬态关键字

被transient修饰成员变量,不能被序列化
private transient int age;
oos . writeohject(new Person(“小美女”,18));
object。= ois.read0bject();
Person{name=”小美女’,age=0}

反序列化的serialVersionUID

java IO(五)——序列化和反序列化

修改实体类后,会生成一个新的序列化号,未经序列化,直接反序列化会抛出异常

java IO(五)——序列化和反序列化