我使用此代码创建一个带有文件列表的 .zip:
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));
for (int i=0;i<srcFiles.length;i++){
String fileName=srcFiles[i].getName();
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
InputStream fis = new FileInputStream(srcFiles[i]);
int read;
for(byte[] buffer=new byte[1024];(read=fis.read(buffer))>0;){
zos.write(buffer,0,read);
}
fis.close();
zos.closeEntry();
}
zos.close();
我不知道 zip 算法和 ZipOutputStream 是如何工作的,如果它在我读取所有数据并将其发送到“zos”之前写了一些东西,那么结果文件的字节大小可能与我选择另一个缓冲区大小不同。
换句话说,我不知道算法是否像:
读取数据-->处理数据-->创建.ZIP
或者
读取数据块-->处理数据块-->在 .ZIP 中写入块-->| ^------------------------------------------------- -------------------------------------------------- --------------------------
如果是这种情况,最好的缓冲区大小是多少?
更新:
我已经测试了这段代码,将缓冲区大小从 1024 更改为 64,并压缩相同的文件:1024 字节的 80 KB 结果文件比 64 字节缓冲区小 3 个字节。在最快的时间内生成最小的 .zip 的最佳缓冲区大小是多少?