如果一个类具有相同的串行UID,究竟会发生什么?

noMAD

我知道为什么我们需要提供一个串行UID(以便在反序列化期间,发送方和接收方具有相同的加载类)。因此,据此,如果我有多个具有相似UID的类,那么我是否会假设会发生反序列化,但之后会出错(我不知道是什么),这是正确的吗?还是它会以某种方式抛出InvalidClassException还是我两种假设都完全脱离了?

我想测试一下,但是再次不确定是否可以工作,因为如果在反序列化过程中正确选择了正确的类怎么办?在这种情况下,一切都会变桃红色。

拉斐尔·温特豪德

一点都不。通过反序列化重新创建实例时,反序列化程序将加载其类。然后,将该类的串行UID与反序列化实例的UID(即序列化时该类的UID)进行比较。仅当这两个UID不匹配时,InvalidClassException才会引发an

例如,如果您将实例序列化为文件,停止JVM,使用该实例类的UID更改后的UID重新编译程序,重新启动应用程序并从以前的文件反序列化此实例,则会发生这种情况。UID旨在向应用程序发出信号,指出对该类应用了不兼容的更改。

如果两个具有不同全限定名的类具有相同的UID,则这根本不会影响您的(反序列化)。供您参考,这是Java文档描述此问题的方式:

序列化运行时与每个可序列化的类关联一个版本号,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送者和接收者是否已加载了该对象的与序列化兼容的类。

如果接收者为对象加载的类serialVersionUID与相应的发送者的类不同,则反序列化将导致InvalidClassException

可序列化类可以声明其自身serialVersionUID通过声明名为领域明确serialVersionUID了必须是staticfinal和类型long

正如您在另一条评论中所问的那样,为什么该serialVersionUID字段的类型long可能会更小。当您未显式设置aserialVersionUID而是由序列化程序隐式推断a时,这可能是为了避免冲突在这种情况下,JVM会散列一个ID,该ID可能会与较小范围内的其他哈希值轻易冲突,例如byte如果您仅为每次手动更改手动增加此数字,则当然不可能耗尽的范围long通常,long当您考虑这些天的内存价格时,单个值也不会太昂贵。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果输入和输出文件相同,究竟会发生什么?

来自分类Dev

如果无法提交检查点数据,究竟会发生什么?

来自分类Dev

如果具有相同名称的字段从两个来源(类和接口)继承,将会发生什么

来自分类Dev

包含头文件时究竟会发生什么?

来自分类Dev

Androids Handler.post,究竟会发生什么

来自分类Dev

如果将我的bean声明为@ApplicationScoped,但它具有一个公共字段,会发生什么?

来自分类Dev

如果我将一个右值分配给一个类的指针成员会发生什么?

来自分类Dev

如果每个请求都有一个改造实例会发生什么?

来自分类Dev

如果2个wifi网络(由不同的人运营)具有相同的SSID,会发生什么情况?

来自分类Dev

关闭计算机电源时,究竟会发生什么?

来自分类Dev

当执行诸如“ get”之类的redis命令时,究竟会发生什么?

来自分类Dev

在shell中运行内置命令时,究竟会发生什么?

来自分类Dev

当你通过已经分配的值指针传递时究竟会发生什么?

来自分类Dev

如果我在while循环中连续创建一个具有不同大小的字节数组并向其中添加读取流会发生什么?

来自分类Dev

如果同一文件中有2个Appdelegate类,将会发生什么情况

来自分类Dev

当 Angular 2 的文件中有两个类,一个装饰器/一个类两个装饰器时会发生什么?

来自分类Dev

如果两个AP位于相同区域中且具有相同的MAC和SSID,将会发生什么情况?

来自分类Dev

当类和函数具有相同的名称时会发生什么?

来自分类Dev

当成为朋友的类具有相同的名称成员变量时会发生什么

来自分类Dev

当32位整数在64位计算机上溢出时,究竟会发生什么?

来自分类Dev

如果我为一个中断创建多个ISR,会发生什么情况?

来自分类Dev

如果在C ++中擦除()一个元素,迭代器会发生什么?

来自分类Dev

它是否定义了如果您浮动一个浮点会发生什么?

来自分类Dev

如果一个工作集超出MongDB中的内存,会发生什么?

来自分类Dev

如果我在fortran中调用一个函数而未定义变量,会发生什么?

来自分类Dev

如果我为一个中断创建多个ISR,会发生什么情况?

来自分类Dev

如果您将一个大整数转换为浮点数会发生什么

来自分类Dev

如果在安装另一个之前*删除DE,会发生什么?

来自分类Dev

如果我使用单个pubnub实例多次订阅一个频道,将会发生什么?

Related 相关文章

  1. 1

    如果输入和输出文件相同,究竟会发生什么?

  2. 2

    如果无法提交检查点数据,究竟会发生什么?

  3. 3

    如果具有相同名称的字段从两个来源(类和接口)继承,将会发生什么

  4. 4

    包含头文件时究竟会发生什么?

  5. 5

    Androids Handler.post,究竟会发生什么

  6. 6

    如果将我的bean声明为@ApplicationScoped,但它具有一个公共字段,会发生什么?

  7. 7

    如果我将一个右值分配给一个类的指针成员会发生什么?

  8. 8

    如果每个请求都有一个改造实例会发生什么?

  9. 9

    如果2个wifi网络(由不同的人运营)具有相同的SSID,会发生什么情况?

  10. 10

    关闭计算机电源时,究竟会发生什么?

  11. 11

    当执行诸如“ get”之类的redis命令时,究竟会发生什么?

  12. 12

    在shell中运行内置命令时,究竟会发生什么?

  13. 13

    当你通过已经分配的值指针传递时究竟会发生什么?

  14. 14

    如果我在while循环中连续创建一个具有不同大小的字节数组并向其中添加读取流会发生什么?

  15. 15

    如果同一文件中有2个Appdelegate类,将会发生什么情况

  16. 16

    当 Angular 2 的文件中有两个类,一个装饰器/一个类两个装饰器时会发生什么?

  17. 17

    如果两个AP位于相同区域中且具有相同的MAC和SSID,将会发生什么情况?

  18. 18

    当类和函数具有相同的名称时会发生什么?

  19. 19

    当成为朋友的类具有相同的名称成员变量时会发生什么

  20. 20

    当32位整数在64位计算机上溢出时,究竟会发生什么?

  21. 21

    如果我为一个中断创建多个ISR,会发生什么情况?

  22. 22

    如果在C ++中擦除()一个元素,迭代器会发生什么?

  23. 23

    它是否定义了如果您浮动一个浮点会发生什么?

  24. 24

    如果一个工作集超出MongDB中的内存,会发生什么?

  25. 25

    如果我在fortran中调用一个函数而未定义变量,会发生什么?

  26. 26

    如果我为一个中断创建多个ISR,会发生什么情况?

  27. 27

    如果您将一个大整数转换为浮点数会发生什么

  28. 28

    如果在安装另一个之前*删除DE,会发生什么?

  29. 29

    如果我使用单个pubnub实例多次订阅一个频道,将会发生什么?

热门标签

归档