0

我的任务是将对象从of复制到. 是一个孩子。ClassBClassLoaderBClassAClassLoaderAClassLoaderAClassLoaderB

我尝试使用序列化并保存了类ClassB

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( baos );
oos.writeObject( ClassB );

下一步是将这个对象读ClassAClassLoaderA. 我怎样才能做到这一点?

升级版:

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

    //Resurrection
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray() );
    ObjectInputStream ois = new ObjectInputStream( bais );
    try {
        Object b1 = ois.readObject();
        ois.close();
        ClassA a1 = (ClassA) b1;

    } catch (Exception e) {
        e.printStackTrace();
    }   

问题是行中有一个 ClassCastException:

ClassA a1 = (ClassA) b1;
4

1 回答 1

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++ 程序员,因为在这些语言中你在这种情况下没有错误。

于 2013-07-24T12:49:54.077 回答