java - 从 Unsafe 创建的匿名类构建 ClassReader

标签 java classloader anonymous-class java-bytecode-asm bytecode-manipulation

我尝试从匿名类构建 ASM ClassReader,但失败了。

匿名类的创建者:

         Class cls = Unsafe.defineAnonymousClass(Hoster, byte[], null);

cls.getName() 是class code.jit.asm.example.Callee/629106582,它与我们看到的传统名称有些不同:class code.jit.asm.example.Callee

然后我尝试了:

a)  ClassReader cr = new ClassReader(cls.getName())

b)  public static InputStream getClassInputStream(Class cls){
        String classAsPath = cls.getName().replace('.', '/') + ".class";
        return cls.getClassLoader().getResourceAsStream(classAsPath);
        //return cls.getResourceAsStream(classAsPath);
    }
    ClassReader cr = new ClassReader(getClassInputStream(cls))

a) 和 b) 都会引发相同的异常:

java.io.IOException: Class not found
    at org.objectweb.asm.ClassReader.readClass(ClassReader.java:455)
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:

如何获得匿名类的输入流?

最佳答案

ASM 无法读取类文件,因为您尝试查找的代码不是由 ASM 通常从中读取类文件的类加载器提供的。但是,您可以使用 Java 代理访问字节码,正如我在这个答案中所解释的:Can you inspect the byte code of a Java 8 lambda at runtime?

关于java - 从 Unsafe 创建的匿名类构建 ClassReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678362/

相关文章:

java - Eclipse 匿名类折叠

使用 Linux PulseAudio 时无法关闭 Java 音频 Clip

java - 将 Jython 代码转换为 Java 类

java - 将Web应用程序部署到URL的过程

java - 为什么 Lucene 找不到任何包含此代码的文档?

java - 从一组文件加载类

namespaces - 我不能在 Symfony 1.4 中使用来自 Symfony2 的 Autoloader 来加载这个命名空间类

java - 对象不是使用 java 反射声明类的实例

Java:我应该在哪里放置匿名监听器逻辑代码?

java - 安卓和Java : use of runnable