检索存储在类中的字段作为字节数组



我正在试验ASM库。

我有一个存储为byte[]类,即从 CAFEBABE 开始,有一个恒定的池等。

我想加载这个类并以尽可能方便的方式提取字段,因为这个过程将被添加到带有 ASM 的方法中。

有没有一种简单的方法可以将字节数组作为类加载,而不会弄乱自定义类加载器等?

编辑:误读了问题。你想从字面上加载类吗?

static class BLoader extends ClassLoader {
    public BLoader(ClassLoader parent) {
        super(parent);
    }
    public Class<?> get(String name, byte[] bytes) {
        return defineClass(name, bytes, 0, bytes.length);
    }
}

使用者:

Class<?> clazz = new BLoader(ClassLoader.getSystemClassLoader()).get("ClassName", cw.toByteArray());

我们使用自定义的 ClassLoader,因为我们需要一个公共的 defineClass() 方法。所以你所要做的就是字面意思。

public class GenericClassLoader extends ClassLoader {
    public Class<?> defineClass(String name, byte[] b) {
        return defineClass(name, b, 0, b.length);
    }
}

并加载类。

GenericClassLoader classLoader = new GenericClassLoader();
Class<?> clazz = cl.defineClass("class name", classWriter.toByteArray());

如果你有一个 ClassNode,并且想要根据类名生成类,你可以使用 classNode.name,就像这样。

Class<?> clazz = classLoader.defineClass(cn.name, classWriter.toByteArray());

相关内容

  • 没有找到相关文章

最新更新