private static final long serialVersionUID = 1L 干什么的?

private static final long serialVersionUID = 1L;是定义以一个序列号。java源码里有大量的类都有这么一个序列号。目的就是把java对象序列化而后进行保存。

       java的序列化机制式通过判断类的serialVersionUID来验证版本的一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。

       serialVersionUID有两种显示的生成方式:

一是默认的1L,比如:private static final long serialVersionUID = 1L;

二是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:

private static final long serialVersionUID=xxxxL;

       当一个类实现了Serializable接口,如果没有显式的定义serialVersionUID变量的时候,java序列化机制会根据编译的Class自动生成一个serialVersionUID当作序列化版本使用,这种情况下,如果Class文件(类名、方法名等)没有发生变化(增加空格、换行、增加注释等等),就算编译再多次,serialVersionUID也不会变化的。
 

这个东西是用来serialization 的key,A和B相互之间传输信息,用seralize,但是相互之间把解包之后的文件进行了更改,如果你程序中不加这个,相互之间再传输,会因为这个key不一样,而失败。所以,在程序中定义,会使软件版本兼容,无论怎么改,都可以相互序列化和反序列化。

Java中,如果class实现了序列化接口,你没有加这一行,eclipse会自动给warning,建议加上,否则,JVM会自动编译生成一个序列号,这样传输会造成反序列化失败。因为不同的JVM之间的序列化算法是不一样的,不利于程序的移植。

一般情况下,建议序列化的class都给一个序列化的ID,这样可以保证序列化的成功,版本的兼容性。


http://blog.csdn.net/hulefei29/article/details/2823221
http://www.blogjava.net/invisibletank/archive/2007/11/15/160684.html
http://www.blogjava.net/sealyu/archive/2009/04/21/266759.html
private static final long serialVersionUID = 1L;是用来做什么的_爱飞的光的博客-CSDN博客

private static final long serialVersionUID = 1L 干什么的?_leetcode 解题思路-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值