【问题标题】:Obtain the bytes of a class loaded by the boostrap class loader?获取引导类加载器加载的类的字节?
【发布时间】:2021-05-22 07:07:24
【问题描述】:

我想知道是否可以获取由引导类加载器加载的类的字节。在我看到的任何地方,人们都建议获取任意类的字节,必须简单地这样做

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 并从那里读取类数据或其他东西)

【问题讨论】:

    标签: java classloader


    【解决方案1】:

    我想通了。您只需从ClassLoader#getSystemClassLoader() 获取系统类加载器。

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

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多