我想从一个.jar包中,读取其中一个.class文件,并进行加载。下面是我程序的一个片段:
in = new JarInputStream(new FileInputStream(jarPath));
JarEntry entry;
while ((entry = in.getNextJarEntry()) != null) {
String outFileName = entry.getName().substring(
entry.getName().lastIndexOf("/") + 1,
entry.getName().length());
if (outFileName.equals(className + ".class")) {
if (entry.getSize() == -1) {
System.out.println("错误:无法读取该文件大小!");
return null;
}
System.out.println(entry.getSize());
byte[] classData = new byte[(int) entry.getSize()];
in.read(classData);
return loadClass(classData, className);
}
}
在读取的过程中,读取到的.jar包中的类的entry.getSize() 的返回值总是为-1。我查了查API,上面只是写着:“返回条目数据的未压缩大小;如果未知,则返回 -1。”却不知道什么时候会“未知”啊?我用系统的类文件测试过,就能正常返回大小。而自己写的代码,自己压的jar包,就是“未知”....哪位朋友帮忙指点下,不胜感谢。

解决方案 »

  1.   

    代码太乱了 ,重新写下:
    in = new JarInputStream(new FileInputStream(jarPath));
    JarEntry entry;
    while ((entry = in.getNextJarEntry()) != null) {
    String outFileName = entry.getName().substring(
    entry.getName().lastIndexOf("/") + 1,
    entry.getName().length());
    if (outFileName.equals(className + ".class")) {
    if (entry.getSize() == -1) {
    System.out.println("错误:无法读取该文件大小!");
    return null;
    }
    System.out.println(entry.getSize());
    byte[] classData = new byte[(int) entry.getSize()];
    in.read(classData);
    return loadClass(classData, className);
    }
    }
      

  2.   

    为什么entry.getSize()的返回值是-1啊?~~为什么读不到文件的大小呢?~