由于没赋值serialVersionUID 只是警告,不是错误,造成先前没留意设定serialVersionUID,网络两端上线运行一段时间也感觉正常。如果再增减修改field,没赋值好serialVersionUID,网络两端就不匹配。

解决步骤如下:serialver命令在jdk/bin目录,用于算出某类的serialVersionUID。

(1)用旧代码的类生成 serialVersionUID: serialver -classpath myjar-1.0.jar com.icegarden.myjar.MyDO

输出结果类似:com.icegarden.myjar.MyDO: static final long serialVersionUID = 2075130392266935898L;

(2)然后将这行代码复制到新代码上。

即是说, 如果要在序列化DO里增加/变化field,又要和旧的没有serialVersionUID的DO作兼容,可以用serialver算出旧DO的serialVersionUID,赋值给变化了的DO,这样两边就匹配了

其它说明:

(3)可能会造成两边不匹配的改动,最好是搭车在两端都停机发布时。如果按以上方法做,应该不需出现如此情形。

(4)如果其它field不变动时,增加由serialver自动生成serialVersionUID并不会造成不匹配的情况。

(5)相同的代码,用serialver生成的和用eclipse界面生成的,是一样的。

04-16 02:55