解压缩ZipInputStream时出现NegativeArraySizeException

时间:2014-06-03 06:55:57

标签: java file exception client-server

我尝试使用ZipInputStream / ZipOutputStream从服务器向客户端发送一些文件。

在服务器中,everythng顺利,但在客户端,当我想解压缩时,文件的大小为 -1

所以它失败了。我该怎么做以及为什么会这样?

             socket = new Socket("127.0.0.1",3000);

         String outDir = "C:\\here";



             BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());            



            ZipInputStream zips = new ZipInputStream(bis);
            ZipEntry zipEntry = null;




              while(null != (zipEntry = zips.getNextEntry())){
             String fileName = zipEntry.getName();
                File outFile = new File(outDir + "/" + fileName);
        System.out.println(outFile.getName()+"      "+zipEntry.getCompressedSize());

    if(zipEntry.isDirectory()){
    File zipEntryFolder = new File(zipEntry.getName());
    if(zipEntryFolder.exists() == false){
     outFile.mkdirs();

    }

        continue;
    }else{
    File parentFolder = outFile.getParentFile();
    if(parentFolder.exists() == false){
     parentFolder.mkdirs();
    }
   }

   System.out.println("ZipEntry::"+zipEntry.getCompressedSize());



        FileWriter fW=new FileWriter(outFile);
            try (BufferedWriter bfW = new BufferedWriter(fW)) {
                bfW.write(zips.getNextEntry().toString());
            }
                                                                    }

              socket.close();

                                                            }

zipEntry.getCompressedSize(); 的结果等于-1。但在将其写入服务器的套接字后,我检查大小,它是实际大小。所以我感到困惑。

IDE提供的例外是客户端无效存储块长度错误

1 个答案:

答案 0 :(得分:0)

您不能依赖getSize返回实际的未压缩大小。您需要从ZipInputStream中调用zips.read,直到它不再读取任何字节为止。