我是靠谱客的博主 高兴洋葱,最近开发中收集的这篇文章主要介绍在不同的classloader之间进行对象的序列化和反序列化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    在同一个classloader中,利用如下的方法serializabale和deserializable对象:

  ByteArrayOutputStream bo=new ByteArrayOutputStream();

  ObjectOutputStream oo=new ObjectOutputStream(bo);
  oo.writeObject(outObject);

  

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());
  ObjectInputStream oi=new ObjectInputStream(bi);
  Object inObject = oi.readObject();
    当序列化的对象和反序列化的对象不在同一个classloader中时,以上的代码执行时,就会报无法把属性付给对象的错误,此时应当,通过设置反序列化得classloader,来解决这个问题。

  首先,从ObjectInputStream继承一个自己的ObjectInputStream:

public class CustomObjectInputStream extends ObjectInputStream {

 protected ClassLoader classLoader = this.getClass().getClassLoader();

 /**
  * @param in
  * @throws IOException
  */
 public CustomObjectInputStream(InputStream in) throws IOException {
  super(in);
  // TODO Auto-generated constructor stub
 }

 public CustomObjectInputStream(InputStream in, ClassLoader cl)
   throws IOException {
  super(in);
  // TODO Auto-generated constructor stub
  this.classLoader = cl;
 }

 /*
  * (non-Javadoc)
  *
  * @see java.io.ObjectInputStream#resolveClass(java.io.ObjectStreamClass)
  */
 @Override
 protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
   ClassNotFoundException {
  // TODO Auto-generated method stub
  String name = desc.getName();
  try {
   return Class.forName(name, false, this.classLoader);
  } catch (ClassNotFoundException ex) {
   return super.resolveClass(desc);
  }
 }

}

然后在反序列化时,把序列化对象的classloader的传入:

   

 

ByteArrayOutputStream bo=new ByteArrayOutputStream();

ObjectOutputStream oo=new ObjectOutputStream(bo);
oo.writeObject(outObject);

 

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());

   CustomObjectInputStream oi=new CustomObjectInputStream(bi,outObject.getClass().getClassLoader());
  
   Object = oi.readObject();

最后

以上就是高兴洋葱为你收集整理的在不同的classloader之间进行对象的序列化和反序列化的全部内容,希望文章能够帮你解决在不同的classloader之间进行对象的序列化和反序列化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部