将Class对象转换为字节

问题描述 投票:26回答:4

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

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

java classloader
4个回答
25
投票

2
投票

您可以尝试Java instrumentation!特别是ClassFileTransformer您可能会感兴趣!

您只需重写transform方法(来自ClassFileTransformer),并且您的transform方法将在加载每个类之前被调用。因此,您可以执行任何类字节操作。

2
投票

1
投票
© www.soinside.com 2019 - 2024. All rights reserved.