将Class对象转换为字节

如果我在运行时有一个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,byte

[],int,int)

编辑:我已经接受了getResourceAsStream的答案,因为它非常简单,并且大多数时候都可以使用。ClassFileTransformer似乎是一个更强大的解决方案,因为它不需要从.class文件中加载类。例如,它将处理网络加载的类。这种方法有很多困难,但是我会牢记。谢谢大家!

回答:

通常,您通常可以从Classloader将类作为资源加载。

Class c = ...

String className = c.getName();

String classAsPath = className.replace('.', '/') + ".class";

InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);

我可能会建议使用Apache commons-

io的内容将InputStream读入byte[],但是IOUtils.toByteArray()应该可以解决。编写该代码非常容易出错和/或变慢。

以上是 将Class对象转换为字节 的全部内容, 来源链接: utcz.com/qa/416015.html

回到顶部