我的任务是从ClassB
ClassLoaderB
<{1}} <{1}}中复制对象。ClassA
。 ClassLoaderA
是ClassLoaderA
的孩子。
我尝试使用序列化并保存了课程ClassLoaderB
ClassB
下一步是将此对象读入ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( baos );
oos.writeObject( ClassB );
的{{1}}。我怎样才能做到这一点?
UPD:
以下是对象的反序列化方式:
ClassA
问题是在行中存在ClassCastException:
ClassLoaderA
答案 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 ++程序员,因为在这种语言中你没有错误。