序列化和反序列化

一 基本概念

1.什么是序列化:Java序列化就是指把Java对象转换为字节序列的过程。

2.什么是反序列化:Java反序列化就是指把字节序列恢复为Java对象的过程。

3.序列化的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。

4.反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)

二 什么情况下需要序列化 

当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
当你想用套接字在网络上传送对象的时候;
当你想通过RMI传输对象的时候;

(老实说,上面的几种,我就用过个存数据库的。)

三 如何实现序列化

1.实现序列化的必备要求:只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。(不是则会抛出异常) 

2.JDK中序列化和反序列化的API:

①java.io.ObjectInputStream:对象输入流。

该类的readObject()方法从输入流中读取字节序列,然后将字节序列反序列化为一个对象并返回。

②java.io.ObjectOutputStream:对象输出流。

该类的writeObject(Object obj)方法将将传入的obj对象进行序列化,把得到的字节序列写入到目标输出流中进行输出。

3.transient 修饰的属性,是不会被序列化的,序列化之后再反序列化将为null。

4.静态static的属性,他不序列化,用的是内存中的值。

5.serialVersionUID 的作用和用法:

直接把model的类实现的这个接口去掉。然后执行后面的序列化和反序列化的方法。直接报错。
抛异常:NotSerializableException

model里面是没有明确的给这个 serialVersionUID 赋值,但是,Java会自动赋值,
这个值跟这个model的属性相关计算出来的。
实现这个Serializable 接口的时候,一定要给这个 serialVersionUID 赋值

序列化和反序列化_第1张图片

序列化和反序列化_第2张图片

你可能感兴趣的:(Java)