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.释放资源
实体类创建
demo
此时会抛出一个异常,没有序列化异常
public interface Serializable
类通过实现java. io. Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型
本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
实现序列化接口
序列化和反序列化的时候,会抛出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文件
transient关键字:瞬态关键字
被transient修饰成员变量,不能被序列化
private transient int age;
oos . writeohject(new Person(“小美女”,18));
object。= ois.read0bject();
Person{name=”小美女’,age=0}
反序列化的serialVersionUID
修改实体类后,会生成一个新的序列化号,未经序列化,直接反序列化会抛出异常