Java序列化中版本控制

    在Java序列化和反序列化的过程中,版本控制是通过serialVersionUID属性实现的,一般被定义为private static final long 型。
private static final long serialVersionUID = 3257568403819476528L;

    在进行对象的序列化时读取该属性保存到二进制文件当中,反序列化时取得该对象的serialVersionUID属性之后,与当前JVM中保存的Class中的该属性进行一致性判定,如果不一致,则说明Class属性被更改过(当然,在更改类--如添加删除某个属性时,同时需要重新生成该属性的具体值,以保证每一次更改的版本与serialVersionUID的对应)。
    在Eclipse当中,如果一个类实现了Serializable接口,却不定义该属性,会出现警告,通过eclipse或者serialver命令都可以生成该属性的64bit的long型值(通过SHA-1的hash加密算法生成)。
    之后,反序列化之前首先验证JVM当中serialVersionUID与二进制流中读取到的serialVersionUID值是否一致,如果不一致,则会抛出java.io.NotSerializableException异常,便不会继续反序列化。

你可能感兴趣的:(java,eclipse,jvm,算法)