Java 篇 - 序列化与反序列化
一、什么是序列化与反序列化
序列化:将对象转化为字节序列的过程。
反序列化:将字节序列转化为对象的过程。
二、为什么要序列化与反序列化
持久化:方便数据进行永久持久化,当 JVM 停止或者集群当中,仍然可以通过反序列化转化成对象。
网络传输:对象无法直接通过网络传输,因此只能先序列化成数据,典型的例子是 dubbo 的 rcp 传输必须要求传输对象是满足序列化与反序列化。
三、怎么实现序列化与反序列化
序列化的对象需要实现 Serializable 接口或者 Externalizable 接口
JDK 提供的 ObjectOutputStream 和 ObjectInputStream 来实现序列化和反序列化
复制代码
四、serialVersionUID 作用
serialVersionUID 是 Java 为每个序列化类产生的版本标识,可用来保证在反序列化时,发送方和接收方的对象是可兼容的。如果接收方接收的类的 serialVersionUID 与发送方发送的 serialVersionUID 不一致,进行反序列时会抛出 InvalidClassException。所以,为了保证在不同的 jdk 编译实现中,其 serialVersionUID 的值也一致,可序列化的类必须显式指定 serialVersionUID 的值。另外,serialVersionUID 的修饰符最好是 private,因为 serialVersionUID 不能被继承,所以建议使用 private 修饰 serialVersionUID。
评论