在类加载器之间复制对象

时间:2013-07-24 12:34:35

标签: java-ee classloader

我的任务是从ClassB ClassLoaderB <{1}} <{1}}中复制对象ClassAClassLoaderAClassLoaderA的孩子。

我尝试使用序列化并保存了课程ClassLoaderB

ClassB

下一步是将此对象读入ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( baos ); oos.writeObject( ClassB ); 的{​​{1}}。我怎样才能做到这一点?

UPD:

以下是对象的反序列化方式:

ClassA

问题是在行中存在ClassCastException:

ClassLoaderA

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是从类加载器A公开RMI方法,然后从类加载器B调用它,将对象作为参数传递。

如果您想阅读序列化文件:

package com.mkyong.io;

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;

public class Deserializer{

   public static void main (String args[]) {

       Deserializer deserializer = new Deserializer();
       Address address = deserializer.deserialzeAddress();
       System.out.println(address);
   }

   public Address deserialzeAddress(){

       Address address;

       try{

           FileInputStream fin = new FileInputStream("c:\\address.ser");
           ObjectInputStream ois = new ObjectInputStream(fin);
           address = (Address) ois.readObject();
           ois.close();

           return address;

       }catch(Exception ex){
           ex.printStackTrace();
           return null;
       } 
   } 
} 

代码取自: http://www.mkyong.com/java/how-to-read-an-object-from-file-in-java/


<强>更新

只有当ClassB扩展ClassA时,您才可以将对象ClassB复制到ClassA的变量中,否则您将遇到编译错误或ClassCastExceptions:

public class ClassB extends ClassA{

   ...

}

这是因为序列化文件不仅包含数据,还包含有关已序列化的类的信息。

我认为你是以前的C / C ++程序员,因为在这种语言中你没有错误。