j'ai écrit un tableau byte
créé avec ASM à un fichier en utilisant le code suivant:Pourquoi une erreur de valeur magique se produit-elle lors du chargement d'un fichier de classe créé avec ASM?
try(FileOutputStream stream = new FileOutputStream(classname + ".class")) {
stream.write(res);
}
catch (IOException e) {
e.printStackTrace();
}
Le fichier est chargé en utilisant le code suivant:
@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;
}
La classe se trouve mon ClassLoader
, mais Je reçois un ClassFormatError la valeur magique est 4022320623.
Quelle est la cause de ce comportement?
Vos données 'res' n'est probablement pas un fichier' .class' correctement formaté. Comment avez-vous déterminé 'res'? Que signifie "créé avec ASM"? – cxw
http://stackoverflow.com/search?q=4022320623 – Holger
ASM est un framework pour créer du code java byte – user2035039