java - 如何通过网络发送类

标签 java serialization classloader

我有以下问题:我想通过网络发送一个类型 (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/

相关文章:

c# - 将 Newtonsoft.Json 与嵌套自定义类一起使用

java - Tomcat 6 vs 7 - lib vs shared/lib - 只有 jar ?

java - 碧 Jade 报告 : How to add font not in the application classpath

java - 如何在运行时从 jar 文件加载实现接口(interface)的类?

java - Java 二叉树实现中链接对象的异常

java注释-运行时自动使用

java - JPA 标准 - 获取子实体而不是根实体

java - 打印出用户输入的数组

java - 需要通用/动态序列化/编码,类似于 Terracotta

c# - 序列化排除类成员的 POCO