我从下面的链接下面的例子:不兼容的魔法值误差
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