读:《Understand the serialVersionUID》

《谈原型模式还有JAVA克隆还有Transient》时用到对象流,能够被写进对象流的的类都必须标记一个接口序列化。
用eclipse的话,会看到一个编译警告:

The serializable class xxx does not declare a static final serialVersionUID field of type long

 

那么这个变量是干啥的呢?
serialVersionUID是一个用来版本控制的UID。具体可以参考这篇文章《Understand the serialVersionUID》和相关的JSL

这篇随笔为该文章的阅读笔记。

要测试serialversionUID的版本控制功能,很简单。写三个类:

一个序列化类。

一个写对象流的类。

一个读对象流的类。

当被读取的对象和当前的序列化类的UID不同时会报错。例如:

java.io.InvalidClassException:
local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2427389723552147596

 如果不给定一个UID,JVM会自动生成一个。例如上面的错误是产生于下面两段代码:

public   class  SerialVersionUUIDTest  implements  Serializable {
    
private   static   final   long  serialVersionUID  =   1L ;

}
public   class  SerialVersionUUIDTest  implements  Serializable {

}


默认自动生成的UID,有什么坏处呢?不同环境JVM对同一个类生成的UID可能会不同,从而产生错误。所以说采用分布式的技术或者把对象保存到数据库时应该要注意

转载于:https://www.cnblogs.com/mattmonkey/archive/2011/08/09/2301562.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值