我有一个ObjectInputStream并且想要使用自定义加载类ClassLoader。
因此创建了一个ObjectInputStream覆盖该resolveClass()函数的子类。
现在我的问题是我想ClassLoader在执行期间更改。但有时我在这个流上resolveClass()执行时似乎没有执行。readObject()然后类加载错误ClassLoader。
知道为什么resolveClass()不执行以及如何解决此问题吗?
我有一个ObjectInputStream并且想要使用自定义加载类ClassLoader。
因此创建了一个ObjectInputStream覆盖该resolveClass()函数的子类。
现在我的问题是我想ClassLoader在执行期间更改。但有时我在这个流上resolveClass()执行时似乎没有执行。readObject()然后类加载错误ClassLoader。
知道为什么resolveClass()不执行以及如何解决此问题吗?
resolveClass()将在流中的每个类描述符调用一次。我不知道如果您为同一个完全限定的类名编写多个描述符会发生什么 - 可能未指定。正确的解决方案是使用多个流(可以相互嵌套)。
来自 Java API 文档ObjectInputStream.resolveClass():
对于流中的每个唯一类,该方法只会被调用一次。
可能的快速修复:
reset()发送后始终调用ObjectOutputStream。这将重置流,就好像它们是新的一样,并使他们忘记已经发送/接收了一个类。