1
我有大約5到6個大文件,每個大小3 GB。我的目標是壓縮這些文件,然後使用文件servlet傳輸它。我的當前代碼需要大量的時間,導致瀏覽器上的超時會話。有沒有更好的方法來壓縮文件。是否有更好的方法來壓縮java中的大文件?
File zipFile=new File(downloadedFileLocation.getAbsolutePath()+"/Download.zip");
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for(File f:downloadedFileLocation.listFiles()) {
byte[] buffer = new byte[1024];
ZipEntry ze= new ZipEntry(f.getName());
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(f.getAbsolutePath());
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
zos.closeEntry();
f.delete();
}
zos.close();
fos.close();
更改緩衝區大小會有什麼區別嗎?
任何人都可以建議任何更好的方式,可以更快地完成壓縮。
物理說「不」。如果無法並行操作,則文件的大小和數量將呈線性關係。 – duffymo
像@duffymo說的。這就是爲什麼一些網站顯示「你的下載將很快準備就緒」,然後生成並向你發送鏈接或使用一些漂亮的客戶端更新來使URL可用。 –
您的緩衝區非常小(現代尺寸爲131072或更多),但不太可能產生足夠大的差異。你可能會使用'zos.setMethod(ZipOutputStream.STORED);'來避免壓縮,但你真的不應該期望能夠同步處理15GB的數據。在後臺進行壓縮,存儲結果,並讓客戶進行投票直至完成。 –