Java序列化和反序列化
2020-11-13 本文已影响0人
HachiLin
1. 什么是序列化和反序列化
- 序列化:把Java对象转化为字节序列的过程。
- 反序列化:把字节序列恢复为Java对象的过程。
2. 为什么需要序列化和反序列化
- 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
- 在网络上传送对象的字节序列。
3. 如何实现序列化与反序列化
3.1 JDK类库中序列化API
使用到JDK中关键类 ObjectOutputStream(对象输出流) 和ObjectInputStream(对象输入流)
ObjectOutputStream 类:通过使用 writeObject(Object object) 方法,将对象以二进制格式进行写入。
ObjectInputStream 类:通过使用 readObject()方法,从输入流中读取二进制流,转换成对象。
3.2 对象实现Serializable接口
通过实现java.io.Serializable接口,可以在Java类中启用可序列化。
-
serialVersionUID说明
序列化版本号,取值是 Java 运行时环境根据类的内部细节自动生成的。序列化和反序列化就是通过对比其 serialversionUID 来进行的,一旦定义了serialversionUID就不能去修改,否则反序列化就无法成功!
4. 序列化问题
我们进行序列化时。可能不希望将一些敏感的内容序列化,如:密码。
这是我们可以使用transient的关键字进行标记,用来防止敏感对象被序列化,transient修饰符仅适用于变量,不适用于方法和类。同时,还有另外的一种方法用来进行该操作:Externalizable接口(不常用,所以不介绍了)。