当一个类加载了一个自定义的ClassLoader时,它当然会遵循对结果对象的“getClassLoader()”方法的调用,默认情况下将返回自定义的ClassLoader。
如果相同的对象是序列化的,通过网络发送然后反序列化,我的查询会发生什么。将在Deserialised类上调用“getClassLoader()”仍返回自定义ClassLoader吗?
答案 0 :(得分:2)
如果相同的对象是序列化的,通过网络发送然后反序列化,我的查询会发生什么。将在Deserialised类上调用“getClassLoader()”仍返回自定义ClassLoader吗?
类加载器未序列化。 getClassLoader()将为您提供ObjectInputStream正在使用的类加载器。
来自ObjectInputStream.resolveClass
ObjectInputStream中此方法的默认实现返回调用
的结果 Class.forName(desc.getName(), false, loader)
其中loader的确定如下:如果当前线程的堆栈上有一个方法,其声明类是由用户定义的类加载器定义的(并且不是为实现反射调用而生成的),那么loader是类加载器对应的最接近当前执行帧的方法;否则,loader为null
答案 1 :(得分:1)
否即可。您将类的实例与实际类本身混淆。必须在序列化对象反序列化之前加载该类。