gpt4 book ai didi

java - 从加载的类中获取字节码

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:22 25 4
gpt4 key购买 nike

假设在我的 JVM 中我有一个加载类 Class<C> myClass .有没有一种可靠的方法可以向 JVM 询问 .class 的 bytecode 内容? IE。像这样:

<C> byte[] getClassBytecode(Class<C> myClass) {
return /* the contents of the .class resource where C was loaded from */;
}

(显然 InputStreambyte[] 一样好)。我知道我可以使用 myClass.getResource() (和 friend )获取类文件,但是敲打类名来获取 URL 以提供给 getResource 感觉不对。另外,我不确定在 C 的情况下会如何表现?是动态生成的(例如使用 javax.tools.JavaCompiler )。

有什么(更好的)想法吗?

注意:目标是能够将 bytecode 类推送到不同的 JVM 并使用自定义类加载器将它们加载到那里

最佳答案

note: the goal is to be able to load the bytecode using a custom classloader on a different JVM

类加载器 doesn't just load bytecode .因此,如果您能够从 JVM 内存中获取字节码(如果您编写大量特定于实现的 native 代码,这在理论上是可能的),那么它对您的远程类加载器将毫无用处。你需要给它一个实际的 .class 文件。

Class.getResource()是完成这项任务的最佳方式。由于它看起来与调用类在同一个包中,因此您需要做的就是采用类的简单名称,附加“.class”即可完成。

如果你有内部类或嵌套类,它确实会变得有点困难,但这是一个你无论如何都必须处理的实现细节(如果你推送初始类,你仍然需要拉取任何依赖类).

关于java - 从加载的类中获取字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com