我实现Serializable
了保存对象的方法,如下所示:
public class MyType implements Serializable {
@Override
public String toString() {
return "This is a MyType";
}
public static void main(String[] args) {
try {
ObjectOutputStream outStream = new ObjectOutputStream(
new FileOutputStream("objecturl");
outStream.writeObject(new MyType());
outStream.flush();
} catch (Exception e) { e.printStackTrace(); }
}
}
我曾经运行过该程序,因此MyType
保存在objecturl
。
然后,我将该类库打包到位于的jar中jarurl
。
如果要使用保存在新程序中的对象MyType
,给定包含的jar,该如何访问我的新程序MyType.class
?
换句话说,如何使用jarjarurl
来使以下内容工作而不会得到ClassNotFoundException
?
public class NewProgram {
public static void main(String[] args) {
try {
ObjectInputStream inStream = new ObjectInputStream(
new FileInputStream("objecturl");
Object o = inStream.readObject();
System.out.println(o.toString());
} catch (Exception e) { e.printStackTrace(); }
}
}
输出为“这是MyType”,并且MyType
不包含在与该库相同的库中NewProgram
。
显然,还有其他方法可以使程序输出“ This is MyType”。我在这里主要关心的是序列化的,重写的实现的用法。
我知道这与ClassLoaders有关,但是我不确定在这种设置下它是如何工作的,在这种设置下,类的类型是完全未知的,但类的父级是已知的。
我自己还没有完成此操作,但是从某种程度上来说,问题似乎有两个阶段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句