请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

序列化ID的作用?

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

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

正在回答

2回答

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

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

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


2 回复 有任何疑惑可以回复我~
  • 提问者 oooooooooooooooo #1
    谢谢老师
    回复 有任何疑惑可以回复我~ 2019-04-04 16:22:39
  • 所以,异常类为什么要设置序列化ID,只是因为消除编译器提示吗
    回复 有任何疑惑可以回复我~ 2019-12-24 14:39:07
  • 异常类同样需要有序列化和反序列化的需求,特别是针对RPC远程通信的时候,客户端和服务器按照双方约定好的异常信息进行展示,此时就涉及到异常的序列化和反序列化了
    回复 有任何疑惑可以回复我~ 2019-12-25 01:33:04
qq_王男神_03470216 2019-04-04 11:01:58

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

3 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    神同步回答。。感谢热心的同学
    回复 有任何疑惑可以回复我~ 2019-04-04 11:46:21
  • 提问者 oooooooooooooooo #2
    谢谢同学热心解答~ ^ ^
    回复 有任何疑惑可以回复我~ 2019-04-04 16:23:17
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信