“NegativeArraySizeException” - 自定义类加载器

时间:2012-03-27 09:56:12

标签: java class memory loader encryption

我有一个类加载器工作,虽然我现在在将它调整到我的新应用程序后出现错误。我相信这是因为我将整数转换为长整数。

private byte[] loadClassData(String name) {
    try {
        JarInputStream jis = new JarInputStream(new ByteArrayInputStream(dec));
        JarEntry entry = null;
        String entryName = null;
        while((entry = jis.getNextJarEntry()) != null)
        {
            entryName = entry.getName();
            if(entryName.equalsIgnoreCase(name))
            {
                try{
                    classBytes = new byte[(int)entry.getSize()];
                    jis.read(classBytes, 0, classBytes.length);
                    return classBytes;
                }catch(Exception ex){
                    ex.printStackTrace();
                    return null;
                }
            }
        }
        return classBytes;
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
    } catch (Exception ex) {
        ex.printStackTrace();
        System.out.println(ex.getMessage());
    }
    return null;
}

无论如何,这是它的基础。我在“new byte [(int)entry.getSize()];”上收到错误一部分。

“java.lang.NegativeArraySizeException”

感谢。

1 个答案:

答案 0 :(得分:3)

是的,因为ZipEntry.getSize()可以返回-1。即使没有返回-1,也不应该假设对read的单个调用将读取所有数据。您应该在循环中读取,直到输入流返回-1。

我建议您使用ByteStreams.toByteArray(InputStream)中的Guava进行此操作。