以下为 Jean 学习笔记和习题整理,供学习和参考

# 是什么?

序列化: 把对象转换为字节序列的过程。

** 反序列化:** 把字节序列恢复成 Java 对象的过程。

# 为什么?

类的对象会随着程序的终止而被垃圾收集器销毁。在 Java 中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用此对象。但是,我们创建出来的这些对象都存在于 JVM 中的堆(heap)内存中,只有 JVM 处于运行状态的时候,这些对象才可能存在。一旦 JVM 停止,这些对象也就随之消失;如果不重新创建对象并且调用该类,该怎么做?这时,可以通过序列化将数据转换为字节流。

序列化可以将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或者通过网络发送到任何其他程序。

# 怎么做?

# Serializable

通过实现 java.io.Serializable 接口,可以在 Java 类中启用可序列化。它是一个 标记 接口,意味着它不包含任何方法或字段,仅用于标识可序列化的语义

如果试图对一个没有实现 Serializable 接口的类的实例进行序列化,会抛出 NotSerializableException 异常。

SerialVersionUid 序列化版本号的作用是用来区分我们所编写的类的版本,用于判断反序列化时类的版本是否一直,如果不一致会出现版本不一致异常。

# transient

如果一个对象的类实现了 Serializable 接口,但是包含一个不可序列化的数据域,则该对象不可序列化。为了使该对象可序列化,需要给不可序列化的数据域加上关键字 transient

transient 修饰符仅适用于变量,不适用于方法和类。

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

问题一:序列化 & 反序列化有什么区别?

更新于

请我喝[茶]~( ̄▽ ̄)~*

Jean 微信支付

微信支付

Jean 支付宝

支付宝

Jean 贝宝

贝宝