我使用以下代码将使用ASM创建的byte
数组写入文件:
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。
这种行为的原因是什么?
答案 0 :(得分:0)
问题似乎是文件的读取方式(使用Apache的Commons IO库)。使用以下内容读取文件可以正常工作:
byte[] bytes = Files.readAllBytes(file.toPath());