如何通过电线发送课程

Pau*_*uli 2 java serialization classloader

我有以下问题:我想通过线路发送一个类型(java.lang.Class)并在另一侧'定义'类.

我试过这样的:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

在接收端:

ByteArrayInputStream bis = new ByteArrayInputStream(request.getBytes());
ObjectInputStream ois = new ObjectInputStream(bis);
Class c = (Class) ois.readObject(); // ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)

所以显然我需要发送类的原始字节码并做一个

ClassLoader.defineClass(bytes, ..
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我没有看到如何检索已加载类的bytcode.我正在寻找类似的东西:

byte[] byteCode = MyClass.class.toByteArray();
Run Code Online (Sandbox Code Playgroud)

这甚至可以使用标准JDK,还是有任何小型lib可以做到这一点?

Mic*_*rdt 5

我不认为你想要什么是完全普遍的.从字节码定义类的行为是不可逆的.但是,您应该能够直接读取字节码文件(假设它是一个URLClassLoader):

MyClass.class.getResourceAsStream("Myclass.class")
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过HTTP访问类文件,并直接URLClassLoader在接收方使用.