java序列化和序列化ID

1,029 阅读1分钟

java序列化

java对象在传输过程中一般是以二进制流的形式进行传输的,java序列化就是将java对象转化成字节序列(将对象状态以二进制字节的形式保存),然后将字节序列保存到磁盘上或通过网络发送到其它应用程序中。

反序列化

反序列化即序列化的逆向操作,将收到的二进制字节流转化成本地内存对象

序列化ID

java的序列化机制是在运行时校验序列化ID来验证版本的一致性。java在反序列化的过程中会将二进制字节流中的序列化ID和本地类的序列化ID进行比较,如果serialVersionUID不一致,则抛出序列化版本不一致异常。如果没有显示地声明类的序列化ID,那么系统将在编译时的为类分配一个序列化ID,所有同一次编译生成的class对象的序列化ID是一致的。

bug假想1
本地类没有显示声明序列化ID,本地对象序列化存储到远程redis数据库,此时项目重新编译并发布上线,那么在将原来存储到redis中的对象进行反序列化的时候,会因为序列化版本不一致而抛出异常。

IDEA自动生成序列化ID

  1. IDEA配置:blog.csdn.net/u013806366/…
  2. 选中类名,按住Alt+enter键