java序列化implements Serializable最好要带上serialVersionUID

1.什么是序列化

  • 序列化

  由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。

  • 反序列化

  反序列化恰恰是序列化的反向操作,也就是说,把已存在在磁盘或者其他介质中的对象,反序列化(读取)到内存中,以便后续操作,而这个过程就叫做反序列化。

2.为什么序列化

序列化的应用情景主要有以下情况(但不限于以下情况)

  • 1)内存中的对象写入到硬盘;
  • 2)用套接字在网络上传送对象;
  • 3)通过RMI(Remote Method Invoke 远程方法调用)传输对象;

3.序列化怎么做(实现Serializable接口即可)

4.为什么最好要带上serialVersionUID

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别。如果你改了这个类,默认的serialVersionUID也会变,可以理解为这个类的hash值。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。

为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修改器显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于立即声明类 -- serialVersionUID 字段作为继承成员没有用处。

你可能感兴趣的:(java)