Incompatible magic value error
War ich nach einem Beispiel aus dem folgenden link:
http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html?page=1
und das ist eine Ausgabe die ich erhalte:
Dieses Programm verwenden SimpleClassLoader. >>>>>> Laden-Klasse : TestClass >>>>>> Nicht ein system Klasse. >>>>>> das Abrufen der Implementierung der Testklasse Datei wurde erfolgreich gelesen Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1768779887 in der Klasse Datei bei java.lang.ClassLoader.defineClass1(Native-Methode) bei java.lang.ClassLoader.defineClassCond(Quelle Unbekannt) bei java.lang.ClassLoader.defineClass(Unknown Source) bei java.lang.ClassLoader.defineClass(Unknown Source) bei aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:80) bei aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:42) bei aha.Beispiel.main(Beispiel.java:11)
hier ist ein Beispiel für meine Methode, die eine Datei liest:
private byte getClassImplFromDataBase(String className)[] {
System.out.println(" >>>>>> Fetching the implementation of "+className);
byte result[];
try {
FileInputStream fi = new FileInputStream("C:/delete/"+className+".impl");
result = new byte[fi.available()];
fi.read(result);
System.out.println("file was read succesfullyl");
return result;
} catch (Exception e) {
/*
* If we caught an exception, either the class wasnt found or it
* was unreadable by our process.
*/
return null;
}
}
Legte ich TestClass.impl-Datei unter C:/delete -Verzeichnis .
Meine Klassen befinden sich unter Paket: aha
Also die Datei TestClass.impl ist, Lesen ok, aber was passiert während der
Ergebnis = defineClass(classData, 0, classData.Länge);
Ich weiß, diese Methode ist veraltet, aber immer noch ??
- Die Datei ist keine gültige Klasse. Was ist in Ihrer Testklasse.impl ? Es sollte ein .Klasse Datei. Auch das Lesen einer Datei zu .availiable() nicht Lesen die gesamte Datei.
- SDiZ
.available()
passiert, auf diese Weise zu arbeiten, die für Dateien, die kleiner als 2 GB sind, aber es ist nicht garantiert, um zu arbeiten. Es funktioniert nicht für alle anderen stream geben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, was die Datei geben Sie
.impl
ist, aber ich vermute, dass es nicht um eine class-Datei enthält Bytecode. Die Magische Zahl1768779887
in hex ist696D706F
oderimpo
in ASCII. (Die ersten vier bytes vonimport
ich vermute)So scheint es mir, dass Sie versuchen zu laden, unkompilierte Java-code, welches Sie nicht (das ist das, was der compiler ist für) Sie sind besser für die Verwendung der Compiler-API, aber ich vermute, dass Sie wirklich brauchen, etwas wie OSGi versuchen, um Klassen zu laden Ihrer selbst erfordert, dass Sie ein sehr detailliertes Verständnis davon, wie Klasse be-arbeiten.
Ich hatte einen ähnlichen Fehler mit einer regulärer struts2 Projekt, gelöst Reinigung, das Projekt.