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

时间:2016-05-26 18:47:12

标签: java java-bytecode-asm jvm-bytecode

我正在试验ASM库。

我有一个类存储为byte[],即以CAFEBABE开头,具有常量池等。

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

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

2 个答案:

答案 0 :(得分:0)

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

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());

答案 1 :(得分:0)

我们使用自定义ClassLoader,因为我们需要apublic 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());