我從下面的鏈接下面的例子:不兼容的魔法值誤差
http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html?page=1 ,這是一個輸出我得到:
This program will use SimpleClassLoader. >>>>>> Load class : TestClass >>>>>> Not a system class. >>>>>> Fetching the implementation of TestClass file was read successfully Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1768779887 in class file at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:80) at aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:42) at aha.Example.main(Example.java:11)
這裏是我的方法的一個例子,讀取一個文件:
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;
}
}
我把TestClass.impl文件放在C:/ delete目錄下。 我的類位於包下:aha 因此,文件TestClass.impl被讀取正常,但在 結果= defineClass(classData,0,classData.length); 我知道這個方法已被棄用,但仍然?
該文件不是有效的類。你的TestClass.impl中有什麼?它應該是一個.class文件。另外,讀取.availiable()文件不會讀取整個文件。 – 2011-06-13 08:08:40
@ J-16 SDiZ'.available()'適用於小於2GB的文件,但不能保證可以正常工作。它不適用於任何其他流類型。 – 2011-06-13 08:16:18