2012-03-06 80 views
2

我有一個生成輸出文件的java應用程序,需要進行壓縮。 目前,我拉上它使用腳本使用Java Zip類或bash zip命令壓縮文件

$ zip <abc.zip> abc 

另一種選擇是讓使用下面的類Java代碼壓縮已生成的文件後。

java.util.zip.ZipEntry; 
java.util.zip.ZipOutputStream; 

現在,想知道在壓縮比和時間方面哪個更好?

Java具有獨立於系統的優點,但這對我來說可以。

+1

爲什麼不測試兩種解決方案並衡量需要多少時間? – 2012-03-06 09:14:00

+1

感謝鮑里斯的建議,但從社區獲得幫助沒有任何壞處。 – 2012-03-06 09:17:57

回答

3

Java的ZipOutputStream使用zip命令使用的zlib作爲本地庫。所以就性能而言,它們應該是等效的。

-1

我認爲當然Java比較慢,因爲它運行在JVM上,而不是直接運行在OS上。 如果我是你,我會繼續使用該腳本,只要我有時間自己執行它。 我認爲如果你自動執行它,如果你沒有時間去執行它們,那會更好。

+0

你錯了。 Java使用本地zlib進行壓縮。 – 2012-03-06 09:19:20

+0

Java實現ZLIB算法,不使用庫。 – simaremare 2012-03-06 19:54:07

+0

你可以看看java源代碼,看看它調用本地庫 – 2012-03-08 10:01:42

0

我認爲表現會相同,但使用

​​

,你可以得到更多的壓縮,你能避免通過給出zip命令-r開關遞歸在java目錄

0

我認爲你可能會得到通過封裝將文件寫入ZipOutputStream的輸出流的一些優點。

使用腳本有幾件事情,你需要做的,你能避免通過直接寫入壓縮的流:

  • 寫出來的未壓縮的文件
  • 啓動一個外部進程(或整合了與腳本的Java應用程序)
  • 閱讀再次
  • 壓縮未壓縮文件(常見的兩種方法)
  • 寫的壓縮文件(常見的兩種方法)

而如果你使用ZipOutputStream

  • 寫出來的結果到流,壓縮它,並將它與您的應用程序與zip腳本集成寫入到壓縮文件
  • 沒有頭痛。
  • 你知道zip是否可部署的平臺上,在這裏我知道了在Linux上而不是在AIX)

與往常一樣,解決的辦法是爲原型,並進行測試,然後再決定性能/壓縮更好/可接受。