zoukankan      html  css  js  c++  java
  • implements Serializable

    implements Serializable


    1. 序列化和反序列化

    序列化: 把对象转换为字节序列的过程称为对象的序列化.
    反序列化: 把字节序列恢复为对象的过程称为对象的反序列化.

    • 在Java和其他语言进行通信的时候, 需要将对象转化成一种通用的格式例如Json( 转换成大家都认识的对象 ), 从对象都Json字符串的转换就是序列化的过程, 反过来, 从Json字符串转换成Java对象就是反序列化的过程.
    • 在Java需要把一个对象的状态保存到文件或者是数据库的时候, 就是数据存取的过程中的中间过程.

    2. 为什么要显示声明serialVersionUID

    serialVersionUID 的作用是验证序列化和反序列化的过程中, 对象是否保持一致. 所以在一般情况下我们需要显示的声明serialVersionUID. 如果接受者加载的该对象的类的serialVersionUID
    和发送者的类版本号不同的话, 反序列化会爆出InvalidClassException错误.

    什么时候会导致爆出这个错误呢? 例如在没有显示声明版本号的时候, 先将对象进行了序列化; 然后不管出于什么目的, 该对象的类被修改了, 哪怕仅仅是添加了一个强制转换, 或者将一个public的属性给私有化了, 都会影响版本号. 此时在这个环境下用反序列化的方法读取以前序列化之后存储起来的对象是会报错的.


    3. 为什么序列化值不用1L

    记得很久以前看的资料, 现在在网上找没找到可以参考的. 下面写的东西 是我自己以前看到的, 并且自认为正确的.

    serialVersionUID是根据类名,接口名,方法名,成员属性以及他们的修饰符生成的唯一ID, 在反序列化的时候会使用ID作为一个判断条件去寻找并验证类, 如果serialVersionUID都是一样的1L的话会降低反序列化的速度.

  • 相关阅读:
    Integer中计算int位数的方法
    Spark学习---常见的RDD转和行动操作
    Spark学习---RDD编程
    《教父》中的经典台词以及英文原版
    关于MATSIM中,如何关闭自动加载dtd的问题
    源发行版8需要目标发行版1.8
    关于Mysql中GROUP_CONCAT函数返回值长度的坑
    【转】通过xml处理sql语句时对小于号与大于号的处理转换
    XmlDocument根据节点的属性值获取节点
    【转】使用SevenZipSharp压缩、解压文件
  • 原文地址:https://www.cnblogs.com/A-FM/p/11977676.html
Copyright © 2011-2022 走看看