我尝试使用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提供的例外是客户端无效存储块长度错误
答案 0 :(得分:0)
您不能依赖getSize
返回实际的未压缩大小。您需要从ZipInputStream中调用zips.read
,直到它不再读取任何字节为止。