2014-11-04 92 views
0

读取对象时,如何可以加载从ObjectInputStream中读取对象时未找到我怎样才能加载从ObjectInputStream中

InputStream pis = new InputStream(); 
    ObjectInputStream ois = new ObjectInputStream(pis); 
    Object o = null; 
    try{ 
     o = ois.readObject(); 
    } 
    catch(ClassNotFoundException ex){ 
     //How to try to load a class to read object again????? 
     o = ois.readObject(); 
    } 

由于一个类未发现了一类, TH

+0

你打算从哪里加载类? – 2014-11-04 08:25:53

+0

我只是想。我打算通过ClassNotFoundException从一个新类加载类。 – scarework 2014-11-04 10:53:25

回答

1

试图反序列化对象时,您尝试反序列化的对象的类应该已经存在于您的类路径中。

如果遇到这种情况,我想你在运行时不能做很多事情。相反,您可以使用它来检测是否仍然缺少类路径中的类,并在开发过程中将其添加到项目和类路径中。

+0

好吧,从技术上讲,您可以创建一个自定义类加载器来从类路径外部加载类。 – 2014-11-04 08:26:48

+0

@RobbyCornelissen是的,当然,但是这将需要分析丢失的类名,你将不得不知道从哪里加载它。一般来说,这是不方便的。你将从哪里加载这个类:'“com.expekertia.tools.CacheLoader”'? – icza 2014-11-04 08:29:00

+0

您确实必须知道从何处加载它。关于它是否方便,我想这将取决于情况。有时你没有多少选择。 – 2014-11-04 08:31:39

0

在两端使用RMIClassLoader,并注意发送端的记录要求。

0

如果班级已经搬迁,也可以抛出ClassNotFoundException

让我们假设你序列化一个类实例。之后,由于一些重构,该类被移动。然后,由于旧的完全限定名称不再有效,因此您被卡住了。没有办法从流中取回对象。