序列化ID的作用?

来源:4-5 店铺注册之Service层的实现

oooooooooooooooo

2019-04-03

翔仔老师好,不太明白这个类里面添加随机序列化ID的作用是什么?能解释下嘛。

另外我没有生成随机序列化ID也没有报错呀?
似乎IDEA默认是不支持自动生成序列化ID的,我后来添加了serialVersionUID插件,就能够自动生成了,
也在此处设置一下就有warn警告了。
图片描述
图片描述
图片描述

写回答

2回答

翔仔

2019-04-04

同学好,显式地定义serialVersionUID有两种用途: 

  1)在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。 

  2)当你序列化了一个类实例后,希望更改一个字段或添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序化旧有实例,并在反序列化时抛出一个异常。如果你添加了serialVersionUID,在反序列旧有实例时,新添加或更改的字段值将设为初始化值(对象为null,基本类型为相应的初始默认值),字段被删除将不设置。 


2
3
翔仔
回复
纯情的慕哥
异常类同样需要有序列化和反序列化的需求,特别是针对RPC远程通信的时候,客户端和服务器按照双方约定好的异常信息进行展示,此时就涉及到异常的序列化和反序列化了
2019-12-25
共3条回复

qq_王男神_03470216

2019-04-04

要知道序列化和反序列化的区别, 一个是将对象转换成字节流(正), 一个是字节流转换成对象(反),Java的序列化机制是通过在运行时判断类的serialVersionUID是不是一致,在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,不然就会报异常

3
2
oooooooooooooooo
谢谢同学热心解答~ ^ ^
2019-04-04
共2条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程