zoukankan      html  css  js  c++  java
  • private static final long serialVersionUID = 1L;

    关于private static final long serialVersionUID = 1L;

    一、什么是Serializable?

    java.io.Serializable 这个接口是用来完成序列化和反序列化操作的;

    二、什么是序列化与反序列化?

    1、任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。

    2、序列化就是把对象转换为字节序列的过程称为对象的序列化;反序列化就是把字节序列恢复为对象的过程称为对象的反序列化。

    3、简单来说:把一个对象以一种方式,打包压缩,成为一个字符串,使他适合存放和传输,这就是序列化。

    反序列化,就是把它从字符串中解压缩,返回成一个对象。

    三、private static final long serialVersionUID = 1L;

    1、serialVersionUID(流标识符),即类的版本定义,可以显示声明也可以隐式声明,是用来表明实现序列化类的不同版本间的兼容性;

    2、jvm在反序列化的时候先去对比这个版本名字,如果数据流中的serialVersionUID和类中的serialVersionUID相同,才会进行反序列化,而不同的话就会抛出异常。一般来说,如果你对一个实现了serializable接口的类进行修改之后,需要修改这个版本信息。

    3、如果你显示定义了private static final long serialVersionUID = 1L;那么如果你忘记修改这个信息,而且你对这个类进行修改的话,这个类也能被进行反序列化。而且不会报错,一个简单的概括就是,如果你忘记修改,那么它是会版本向上兼容的。

    4、如果你不写private static final long serialVersionUID = 1L;即隐式声明的话,而且你对这个类进行修改的话,那么版本上面是不兼容的,于是就会出现反序列化报错的情况。

    参考博客:

    1、https://blog.csdn.net/dancheguiji/article/details/80578020?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.showsourcetag&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.showsourcetag

    2、https://blog.csdn.net/kobesilent/article/details/44975701

    
    
  • 相关阅读:
    grep
    [NOI2009]植物大战僵尸
    sed
    YY的GCD
    awk
    CF1100E
    cat
    tac
    [学习笔记]基数排序
    more
  • 原文地址:https://www.cnblogs.com/javacyq/p/15649101.html
Copyright © 2011-2022 走看看