获取由引导类装入器装入的类的字节数?



我想知道是否有可能获得由引导类加载器加载的类的字节。在我所看到的任何地方,人们都建议获取任意类的字节,必须简单地执行

Class.forName(className).getClassLoader().getResourceAsStream(className.replace('.', '/') + ".class");

然后用您选择的方法读取InputStream,但是这在由引导类加载器加载的类(例如java.lang.Object)上是不可能的,对于那些类Class#getClassLoader()返回null

> Class.forName("java.lang.Object").getClassLoader()
null

这可能吗?我听说可以用乐器演奏,但我希望有更好的方法。如何做到这一点(在Java安装中定位rt.jar并从那里读取类数据或其他)

我明白了。你只需要从ClassLoader#getSystemClassLoader()中获取系统类加载器。

ClassLoader loader = Class.forName(className).getClassLoader();
if (loader == null) loader = ClassLoader.getSystemClassLoader();
final URL url = loader.getResourceAsStream(className.replace('.', '/') + ".class");
// read...

最新更新