Java序列化 1、什么是序列化                                 2、什么是反序列化      3、序列化的作用 4、JDK中的序列化API 5、什么时候需要序列化 6、序列化接口 7、序列化的serialVersionUID 8、序列化的transient关键字 10、序列化transient修改的关键字 9、举例

把对象转换为字节流的过程。

2、什么是反序列化     

把字节流恢复为对象的过程。

3、序列化的作用

1) 把对象的字节流永久地保存到硬盘上,持久化对象;

2) 在网络上传送对象的字节流,传输数据。

4、JDK中的序列化API

1) ObjectOutputStream,writeObject(Object obj)方法;

2)ObjectInputStream,readObject()方法。

5、什么时候需要序列化

当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。

Serializable接口里面什么内容都没有,我们可以将它理解成一个标识接口

6、序列化接口

在Java中的这个Serializable接口其实是给jvm看的,通知jvm,我不对这个类做序列化了,你(jvm)帮我序列化就好了。

Serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

7、序列化的serialVersionUID

serialVersionUID能够让一个对象在反序列化时确定对象的版本,

只要我们自己指定了serialVersionUID,就可以在序列化后,去添加一个字段,或者方法,而不会影响到后期的还原,还原后的对象照样可以使用,而且还多了方法或者属性可以用。如果我们在序列化时指定的serialVersionUID和反序列化时的不一样,就会抛出异常java.io.InvalidClassException。

如果一个类实现了Serializable接口,在代码中没有声明serialVersionUID,那么系统会为该类生成一个默认的serailVersionUID。

但是java源码的注释中强烈建议 需要为类定义一个serialVersionUID,因为不同的系统编译器可能生成默认的serialVersionUID不一样,从而导致反序列化失败,出现InvalidClassException。

8、序列化的transient关键字

transient关键字用户告诉jvm不需要为该字段进行序列化,即不保存该值。通常用于密码或者特殊字段。

static 修饰的静态变量不是对象状态的一部分,因此它不参与序列化。所以将静态变量声明为transient变量是没有用处的。

final变量将直接通过值参与序列化,所以将final变量声明为transient变量不会产生任何影响。

10、序列化transient修改的关键字

如果需要把设置的 transient 的字段也需要序列化和发序列化,如我们需要对密码加密序列化,反序列化后解密处理,又应该怎么做?

readObject 和 writeObject。

Java序列化
1、什么是序列化                                
2、什么是反序列化     
3、序列化的作用
4、JDK中的序列化API
5、什么时候需要序列化
6、序列化接口
7、序列化的serialVersionUID
8、序列化的transient关键字
10、序列化transient修改的关键字
9、举例

9、举例

Java序列化
1、什么是序列化                                
2、什么是反序列化     
3、序列化的作用
4、JDK中的序列化API
5、什么时候需要序列化
6、序列化接口
7、序列化的serialVersionUID
8、序列化的transient关键字
10、序列化transient修改的关键字
9、举例

Java序列化
1、什么是序列化                                
2、什么是反序列化     
3、序列化的作用
4、JDK中的序列化API
5、什么时候需要序列化
6、序列化接口
7、序列化的serialVersionUID
8、序列化的transient关键字
10、序列化transient修改的关键字
9、举例

Java序列化
1、什么是序列化                                
2、什么是反序列化     
3、序列化的作用
4、JDK中的序列化API
5、什么时候需要序列化
6、序列化接口
7、序列化的serialVersionUID
8、序列化的transient关键字
10、序列化transient修改的关键字
9、举例

输出结果中salary为0,因为被transient关键字修饰,不会被序列化,序列化的时候保存为默认值。

如果我们想序列化salary,那么就实现readObject和writeObject方法。

Java序列化
1、什么是序列化                                
2、什么是反序列化     
3、序列化的作用
4、JDK中的序列化API
5、什么时候需要序列化
6、序列化接口
7、序列化的serialVersionUID
8、序列化的transient关键字
10、序列化transient修改的关键字
9、举例