我正在使用以下方法從jar條目(僅包含類文件)中讀取字節。 jar裏面沒有jar文件。使用JarInputStream讀取字節時調用defineClass時的ClassFormatError讀取方法
private List<byte[]> readFromJarFile(File cp)
{
List<byte[]> cbytes = new ArrayList<byte[]>();
try
{
java.util.jar.JarInputStream jin = new java.util.jar.JarInputStream(new java.io.FileInputStream(cp));
java.util.jar.JarEntry je = jin.getNextJarEntry();
while (je != null)
{
if (!je.isDirectory() && je.toString().endsWith(".class"))
{
//assume class file size < Integer.MAX_VALUE
System.out.printf("readFromJarFile: jar entry name %s ...%n",je.toString());
byte[] cbyte = new byte[(int) je.getSize()];
jin.read(cbyte,0,(int) je.getSize());
cbytes.add(cbyte);
}
je = jin.getNextJarEntry();
}
}
catch (java.io.IOException ie)
{
ie.printStackTrace();
}
return cbytes;
}
現在,當我打電話的defineClass字節數組從以下異常上述方法返回被拋出。
java.lang.ClassFormatError: Unknown constant tag 0 in class file <Unknown>
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at san.tool.JPAEntityProcessor$JPAClassLoader.loadClass(JPAEntityProcessor.java:34)
at san.tool.JPAEntityProcessor.processJPAEntities(JPAEntityProcessor.java:49)
at san.tool.JPAEntityProcessorTest.testWithJarFile(JPAEntityProcessorTest.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
我搜索了這個網站和互聯網上的所有其他論壇,但無法找到答案。我期待着來自這裏的成員的一些見解。
感謝和問候 Santanu
有趣。你可以用這樣的jar文件發佈帶有基本測試用例的zip嗎? – 2012-03-03 16:40:14
好的,我將發佈我的代碼與jar文件的zip。但在這裏很新,所以不知道如何發佈zip文件。 – Santanu 2012-03-17 20:58:36