无需访问Java中的类字节码即可反序列化对象

时间:2012-02-19 06:55:50

标签: java networking serialization

我正在尝试通过网络套接字发送自定义的serializable对象,并在另一侧反序列化。以下是我要发送的类的定义:

public class Test implements implements Runnable, Serializable{
    public void run() {
        System.out.println("Hello!");
    }
}

我想在另一端重建这个类,而无需通过将其转换为bytecode来访问类Runnable。不幸的是,它给了我ClassNotFoundException例外。是否有任何解决方法可以在不访问类bytecode的情况下反序列化对象?

3 个答案:

答案 0 :(得分:3)

不是真的。但是,您可以通过http服务器提供jar,然后运行客户端,并将java.rmi.server.codebase系统属性设置为RMI将加载类的URL列表。

答案 1 :(得分:1)

你问的事是不可能的。

Java Serialization api发送对象内的数据字段和一些内务处理信息。数据字段以紧凑的形式发送。在接收方的侧面,使用这些数据字段值构造对象。

将其视为正常创建对象并构造函数初始化字段。这里Java Serialization正在完成构造函数的工作,但是你仍然需要包含方法等字节码的类定义。

答案 2 :(得分:0)

您可以从ClassNotFound异常中的消息中获取类名。我希望有一个更好的方法从反序列化的类中获取类名,而不需要加载类。