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.
InformationsquelleAutor roman | 2011-06-13
Schreibe einen Kommentar