rom*_*man 0 java magic-numbers classloader
我正在关注以下链接中的示例:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我将TestClass.impl文件放在C:/ delete目录下.我的类位于包下:aha因此,文件TestClass.impl被读取正常,但在result = defineClass(classData,0,classData.length)期间发生了一些事情; 我知道这个方法已被弃用但仍然?
我不知道文件类型.impl是什么,但我怀疑它不是包含字节代码的类文件.1768779887十六进制中的幻数是ASCII 696D706F或impoASCII.(import我怀疑的前四个字节)
因此,在我看来,您正在尝试加载未编译的Java代码(这是编译器的用途).您最好使用编译器API,但我怀疑您确实需要类似OSGi的东西来尝试加载你自己的课程需要你对课程加载的工作方式有一个非常详细的了解.
| 归档时间: |
|
| 查看次数: |
11782 次 |
| 最近记录: |