我有以下问题:我想通过网络发送一个类型 (java.lang.Class) 并在另一端“定义”类。
我试过这样:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(MyClass.class);
在接收端:
ByteArrayInputStream bis = new ByteArrayInputStream(request.getBytes());
ObjectInputStream ois = new ObjectInputStream(bis);
Class c = (Class) ois.readObject(); // ClassNotFoundException
所以显然我需要发送类的原始字节码并做一个
ClassLoader.defineClass(bytes, ..
但不幸的是,我看不到如何检索已加载类的字节码。
我正在寻找类似的东西:
byte[] byteCode = MyClass.class.toByteArray();
使用标准 JDK 甚至可以做到这一点,还是有任何小型库可以做到这一点?
最佳答案
我认为您想要的东西不可能完全通用。从字节码定义类的行为是不可逆的。但是,您应该能够做的是直接读取字节码文件(假设它是 URLClassLoader
):
MyClass.class.getResourceAsStream("Myclass.class")
或者,您可以通过 HTTP 访问类文件并直接使用
URLClassLoader
在接收方。
关于java - 如何通过网络发送类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941983/