当前位置: 移动技术网 > IT编程>开发语言>Java > java 中序列化与readResolve()方法的实例详解

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

2019年07月19日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网