一只烤鸭朝北走

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  在进入正文之前我们先明白两个概念,序列化和反序列化;

  序列化:将对象的状态信息转换为可以存储或者传输格式的过程;

  反序列化:从网络或者存储读取对象的状态信息,重新创建该对象的过程;

  手段:通过implements Serializable接口是标注当前对象可以被序列化;

  Serializable接口是一个标记接口,里面没有任何方法,当一个类实现了这个接口,我们常用的可视化编程工具如Eclipse、Idea等会提示你给当前类生成一个serialVersionUID,它使用static final来标记的,表示类加载之后就会被初始化,并且使不可变的,那么它使用来做什么的呢?

  答案是:该序列号用于在反序列化过程中验证对象的发送者和接收者是否为该对象加载了与序列化兼容的类,如果加载的该对象类的serialVersionUID与对应的发送者的类的版本不同,那么反序列化过程会报InvalidClassException异常。

  注意事项:

    1、如果一个类实现了Serializable接口,那么这个类及其子类是自动支持序列化和反序列化的;

    2、序列化时,只对对象的状态进行序列化话,而不管对象的方法,如果一个类没有实现Serializable接口,那么默认是不能被序列化的,除非使用其他办法;

    3、如果一个类实现了序列化接口,父类没有实现,那么父类必须含有无参构造方法,并且父类中的状态默认不能被序列化;

    4、并非所有的对象都可以被序列化;

在什么情况下可以需要使用到Serializable接口呢?

    1、当想把内存中的对象状态保存到一个文件中或者数据库中的时候;

    2、当想使用套接字在网络上传输对象的时候;

    3、当想通过RMI传输对象的时候;

 

posted on 2022-08-29 17:56  一只烤鸭朝北走  阅读(88)  评论(0编辑  收藏  举报