【发布时间】:2011-09-13 18:04:05
【问题描述】:
我正在关注以下链接中的示例:
http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html?page=1 这是我得到的输出:
该程序将使用 SimpleClassLoader。 >>>>>> 加载类:TestClass >>>>>> 不是系统类。 >>>>>> 获取 TestClass 的实现 文件被成功读取 线程“主”java.lang.ClassFormatError 中的异常:类文件中不兼容的魔法值 1768779887 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClassCond(未知来源) 在 java.lang.ClassLoader.defineClass(未知来源) 在 java.lang.ClassLoader.defineClass(未知来源) 在 aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:80) 在 aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:42) 在 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 目录下。 我的课程位于包下:啊哈 所以文件 TestClass.impl 被读取了,但是在这个过程中发生了一些事情 结果 = defineClass(classData, 0, classData.length); 我知道这种方法已被弃用但仍然存在??
【问题讨论】:
-
该文件不是一个有效的类。您的 TestClass.impl 中有什么?它应该是一个 .class 文件。此外,将文件读取到 .availiable() 不会读取整个文件。
-
@J-16 SDiZ
.available()对于小于 2GB 的文件恰好可以以这种方式工作,但不能保证可以正常工作。它不适用于任何其他流类型。
标签: java classloader magic-numbers