私は、次のコードを使用して、ファイルにASMを使用して作成byte
配列書きました:ASMで作成したクラスファイルを読み込む際に、マジックバリューエラーが発生するのはなぜですか?
try(FileOutputStream stream = new FileOutputStream(classname + ".class")) {
stream.write(res);
}
catch (IOException e) {
e.printStackTrace();
}
ファイルは、次のコードを使用してロードされます。
@Override
public Class<?> findClass(String name) {
for(URL url : getURLs()) {
File file = new File(url.getPath().substring(1) + name + ".class");
if(file.exists()) {
try {
System.out.println("found class");
byte[] bytes = IOUtils.toByteArray(new FileReader(file));
return super.defineClass(name, bytes, 0, bytes.length);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
クラスは私のClassLoader
によって発見されたのが、私はClassFormatErrorを取得します。魔法の値は4022320623です。
この現象の原因は何ですか?
あなたの 'res'データはおそらく適切にフォーマットされた' .class'ファイルではありません。 'res'をどうやって決めましたか? 「ASMで作成された」とはどういう意味ですか? – cxw
http://stackoverflow.com/search?q=4022320623 – Holger
ASMはJavaバイトコードを作成するためのフレームワークです – user2035039