将Class对象转换为字节

Bri*_*ris 24 java classloader

如果我在运行时有一个Class实例,我可以得到它的byte []表示吗?我感兴趣的字节是Class文件格式,这样它们就是[ClassLoader.defineClass] [3]的有效输入.

[3]:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String ,byb [],int,int)

编辑:我已经接受了一个getResourceAsStream答案,因为它非常简单,大部分时间都可以工作.ClassFileTransformer似乎是一个更强大的解决方案,因为它不需要从.class文件加载类; 例如,它将处理网络加载的类.用这种方法可以通过几个环节跳过,但我会牢记在心.谢谢大家!

Ale*_*ler 23

您通常可以将类作为资源从类加载器加载.

Class c = ...
String className = c.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);
Run Code Online (Sandbox Code Playgroud)

我可能会建议使用Apache commons-io中的东西将InputStream读入a byte[],但是IOUtils.toByteArray()应该这样做.编写代码很容易出错和/或变慢.