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