3

当一个类被一个自定义的 ClassLoader 加载时,当然,调用结果对象的“getClassLoader()”方法将默认返回自定义的 ClassLoader。

我的查询是如果同一个对象被序列化,通过网络发送然后反序列化会发生什么;在 Deserialised 类上调用“getClassLoader()”是否仍会返回自定义 ClassLoader?

4

2 回答 2

2

我的查询是如果同一个对象被序列化,通过网络发送然后反序列化会发生什么;在 Deserialised 类上调用“getClassLoader()”是否仍会返回自定义 ClassLoader?

类加载器未序列化。getClassLoader() 将为您提供 ObjectInputStream 正在使用的类加载器。


来自ObjectInputStream.resolveClass

ObjectInputStream中该方法的默认实现返回调用的结果

 Class.forName(desc.getName(), false, loader)

其中 loader 确定如下:如果当前线程的堆栈上有一个方法,其声明类是由用户定义的类加载器定义的(并且不是为实现反射调用而生成的),则 loader 是对应于最近的类加载器这种方法对当前执行的帧;否则,加载程序为空

于 2012-10-02T11:36:43.620 回答
1

没有。您将类的实例与实际的类本身混淆了。必须在反序列化序列化对象之前加载该类。

于 2012-10-02T11:36:18.680 回答