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()方法的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java web Hibernate如何与数据库链接

    Java web Hibernate如何与数据库链接

    这篇文章主要介绍了Java web Hibernate如何与数据库链接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • springsecurity 登录认证流程分析一(ajax)

    springsecurity 登录认证流程分析一(ajax)

    这篇文章主要介绍了springsecurity 登录认证一(ajax篇),本文通过实例代码图文相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • Java实现简单订餐系统

    Java实现简单订餐系统

    这篇文章主要为大家详细介绍了Java实现简单订餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Java中字符数组、String类、StringBuffer三者之间相互转换

    Java中字符数组、String类、StringBuffer三者之间相互转换

    这篇文章主要介绍了Java中字符数组、String类、StringBuffer三者之间相互转换,需要的朋友可以参考下
    2018-05-05
  • 快速了解Maven

    快速了解Maven

    这篇文章主要介绍了快速了解Maven,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java调用shell命令涉及管道、重定向时不生效问题及解决

    Java调用shell命令涉及管道、重定向时不生效问题及解决

    这篇文章主要介绍了Java调用shell命令涉及管道、重定向时不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • org.slf4j.Logger中info()方法的使用详解

    org.slf4j.Logger中info()方法的使用详解

    这篇文章主要介绍了org.slf4j.Logger中info()方法的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • JAVA实现LRU算法的参考示例

    JAVA实现LRU算法的参考示例

    这篇文章主要介绍了JAVA实现LRU算法的参考示例,帮助大家根据需求实现算法,感兴趣的朋友可以了解下
    2020-10-10
  • 解决Springboot不能自动提交数据库连接问题

    解决Springboot不能自动提交数据库连接问题

    在使用SSM框架开发时,若在同一Service内部方法间互相调用,直接使用this关键字会导致事务管理失效,从而引发如数据库连接不足等问题,原因是通过this调用不会经过Spring的代理,因此不会自动进行事务处理
    2024-09-09
  • Spring Boot集成Druid数据库连接池

    Spring Boot集成Druid数据库连接池

    这篇文章主要介绍了Spring Boot集成Druid数据库连接池,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论