java 中序列化与readResolve()方法的实例详解

 更新时间:2017年08月07日 14:18:29   转载 作者:零度anngle  
这篇文章主要介绍了java 中序列化与readResolve()方法的实例详解的相关资料,这里提供实例帮助大家理解这部分知识,需要的朋友可以参考下

java 中序列化与readResolve()方法的实例详解

    readResolve方法是作用是什么?这个方法跟对象的序列化相关(这样倒是解释了为什么 readResolve方法是private修饰的)。 怎么跟对象的序列化相关了?

       下面我们先简要地回顾下对象的序列化。一般来说,一个类实现了 Serializable接口,我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象。不过当序列化遇到单例时,里边就有了个问题:从内存读出而组装的对象破坏了单例的规则。单例是要求一个JVM中只有一个类对象的,而现在通过反序列,一个新的对象克隆了出来。如下例所示:

  Java代码:

public final class MySingleton implements Serializable { 
   private MySingleton() { } 
   private static final MySingleton INSTANCE = new MySingleton(); 
   public static MySingleton getInstance() { return INSTANCE; } 
} 

       当把 MySingleton对象(通过getInstance方法获得的那个单例对象)序列化后再从内存中读出时,就有一个全新但跟原来一样的MySingleton对象存在了。那怎么来维护单例模式呢?这就要用到readResolve方法。 如下所示: 

public final class MySingleton implements Serializable{ 
  private MySingleton() { } 
  private static final MySingleton INSTANCE = new MySingleton(); 
  public static MySingleton getInstance() { return INSTANCE; } 
  private Object readResolve() throws ObjectStreamException { 
    // instead of the object we're on, 
    // return the class variable INSTANCE 
   return INSTANCE; 
  } 
} 

           这样,当JVM从内存中反序列化地"组装"一个新对象时,就会自动调用这个 readResolve方法来返回我们指定好的对象了,单例规则也就得到了保证。

以上就是java 中序列化与readResolve()方法的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • SpringBoot整合MyCat实现读写分离的方法

    SpringBoot整合MyCat实现读写分离的方法

    这篇文章主要介绍了SpringBoot整合MyCat实现读写分离的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Java输入字母来判断星期几的实现代码

    Java输入字母来判断星期几的实现代码

    这篇文章主要介绍了Java输入字母来判断星期几的实现代码,用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母需要的朋友可以参考下
    2017-02-02
  • Java使用DFA算法实现过滤多家公司自定义敏感字功能详解

    Java使用DFA算法实现过滤多家公司自定义敏感字功能详解

    这篇文章主要介绍了Java使用DFA算法实现过滤多家公司自定义敏感字功能,结合实例形式分析了DFA算法的实现原理及过滤敏感字的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • spring boot 监控处理方案实例详解

    spring boot 监控处理方案实例详解

    这篇文章主要介绍了spring boot 监控处理方案的相关资料,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Java中对象的销毁方法分析

    Java中对象的销毁方法分析

    这篇文章主要介绍了Java中对象的销毁方法,较为详细的分析了对象的功能、用法及销毁对象对于程序运行的益处,需要的朋友可以参考下
    2015-04-04
  • Spring web集成rabbitmq代码实例

    Spring web集成rabbitmq代码实例

    这篇文章主要介绍了Spring web集成rabbitmq代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • JAVA JNI函数的注册过程详细介绍

    JAVA JNI函数的注册过程详细介绍

    这篇文章主要介绍了JAVA JNI函数的注册过程详细介绍的相关资料,需要的朋友可以参考下
    2016-11-11
  • iBatis习惯用的16条SQL语句

    iBatis习惯用的16条SQL语句

    iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.这篇文章主要介绍了iBatis习惯用的16条SQL语句的相关资料,需要的朋友可以参考下
    2016-10-10
  • java生成验证码工具类

    java生成验证码工具类

    这篇文章主要为大家详细介绍了java生成验证码工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java中对象的序列化方式克隆详解

    Java中对象的序列化方式克隆详解

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方。这篇文章主要给大家介绍了Java中对象的序列化方式克隆,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01

最新评论