java将类对象转换为字节
如果我在运行时有一个Class实例,我可以得到它的byte[]表示吗?我感兴趣的字节将在Class file format中,这样它们将是[ClassLoader.defineClass][3]的有效输入
[3]:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String,字节[],int,int)
编辑:我已经接受了getResourceAsStream的答案,因为它非常简单,大多数时候都可以使用。ClassFileTransformer似乎是一个更健壮的解决方案,因为它不需要从中加载类。类文件;例如,它将处理网络加载的类。这种方法有一些困难需要克服,但我会记住的。谢谢大家
# 1 楼答案
通常,您可以将类作为资源从类加载器中加载
我可能会建议使用ApacheCommons io中的一些东西将InputStream读入
byte[]
,但是IOUtils.toByteArray()
应该可以做到这一点。编写代码很容易出错和/或变得缓慢# 2 楼答案
你可以试试java instrumentation!特别是ClassFileTransformer你可能感兴趣
只需重写transform方法(来自ClassFileTransformer),在加载每个类之前就会调用transform方法。那么你可以做任何类字节
# 3 楼答案
一般来说,你不能那样回去。然而,对于某些类加载器,您可能能够获取资源文件,使用完全限定的类名,用
/
替换.
,并附加.class
(因此mypackage.MyClass
变成mypackage/MyClass.class
(请记住,可能区分大小写))# 4 楼答案
利用ClassFileTransformer