首页 > 编程语言 > 详细

Java序列化

时间:2020-04-20 22:17:16      阅读:73      评论:0      收藏:0      [点我收藏+]

序列化

序列化即将对象转换为字节序列,反序列化即将字节序列转换为对象

序列化的作用

  1. 持久存储
  2. 网络传输

如何实现序列化

实现Serializable接口表明可以序列化/反序列化

public class User implements Serializable {
    private static final long serialVersionUID = -969482712208278073L;
    private String name;
}

通过ObjectInputStream,ObjectOutputStream直接读写对象

注意点

  1. static修饰的属性不会被序列化,但反序列化后仍然有值,但是是JVM中的值,而不是序列化文件中的值
  2. transient修饰的属性不会被序列化,反序列化之后为默认值
  3. 属性是对象时属性也要序实现Serializable接口
  4. 请指定serialVersionUID

为什么要指定serialVersionUID

serialVersionUID是根据类名,接口名,成员方法以及属性等生成的一个哈希字段

当你的类属性,接口等发生改变时serialVersionUID也会发生改变

反序列化时首先检查该类是否存在,其次检查serialVersionUID是否一致,如果不一致就会反序列化失败

如果不手动指定序列化serialVersionUID,每次编译JVM都会根据类名,接口名成员方法,属性等自动生成序列化serialVersionUID,当你的类发生改变,之前的序列化数据就无法反序列化了(serialVersionUID发生了改变)

手动指定序列化serialVersionUID之后,当你的类发生改变时(如添加属性)旧的序列化数据仍然可以反序列化,旧的数据得到了保存

自定义序列化方式

transient瞬间变量不受影响

public class Student implements Externalizable {
    private String name;

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {

    }
}

Java序列化

原文:https://www.cnblogs.com/redo19990701/p/12740674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!