在Java中处理未知对象反序列化

时间:2018-06-15 10:12:03

标签: java

我有三个代理,每个代理都在自己的JVM中运行。第一个代理将对象写入第二个读取的流。第二个代理需要一种方法从流中读取对象,并将JVM不知道的任何对象的内容存储为字节数组,以便它可以将对象写入第三个代理(知道所有对象)读取的流。第三个代理可以读取流并反序列化通过它接收的所有对象;它可以在不知道第二个代理是否知道对象的情况下做到这一点。

因此我的问题。如何反序列化:1。未知对象(生成ClassNotFoundException的流信息)作为字节数组? 2.如何对类名(Class类型的对象)执行此操作,其中命名类无法解析?

我找到了this,但它只告诉我如何将对象序列化为发送代理上的字节数组,并在接收代理上对它们进行反序列化;它没有告诉我如何控制流以处理未定义的对象或未知的类名。

也许代理需要操作写入流的控制信息,因此不存在的对象可以存储为字节数组,当代理将数组写入输出流时,可以在适当的时间插入这些字节数组。通常的流数据。

任何指向信息的指针都可以为我提供有关如何完成此操作的线索。

1 个答案:

答案 0 :(得分:0)

您要找的是java.rmi.MarshalledObject。它包含一个不透明的对象,因此如果使用RMI codebase feature (java.rmi.server.codebase),它可以通过没有该类的JVM传递给没有该类的目标JVM。