我試圖做一個程序來壓縮文件是.tar.gz:的tar.gz壓縮沒有爲GIF文件工作
下面是代碼:
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
public class Compress {
public static void main(String[] args) {
BufferedInputStream input = null;
try {
input = new BufferedInputStream(new FileInputStream(new File("input_filename.filetype")));
TarArchiveOutputStream out = null;
try {
out = new TarArchiveOutputStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream("output_filename.tar.gz"))));
out.putArchiveEntry(new TarArchiveEntry(new File("input_filename.filetype")));
int count;
byte data[] = new byte[input.available()];
while ((count = input.read(data)) != -1) {
out.write(data, 0, count);
}
input.close();
} catch (IOException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (out != null) {
try {
out.closeArchiveEntry();
out.close();
} catch (IOException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
input.close();
} catch (IOException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
我使用Apache Commons Compression作爲庫。
我有2個條件測試:
- 壓縮GIF文件
- 壓縮PDF文件
而且我比較使用PeaZip壓縮,這裏是結果:
如果輸入的文件,如果我們使用PeaZip是GIF的壓縮文件增加的大小,相同的。但是對於其他文件,它適用於壓縮過程。
任何人都可以解釋這是怎麼回事?我的代碼有問題嗎?
謝謝您的幫助...
歡迎來到SO。 +1,寫得很好,寫得很好。我也許也應該-1,因爲它是一個非常有名的壓縮特性,它只能使用一次。正如所有答案指出的那樣,壓縮已壓縮的東西可能會使其變大,而不是變小。但我會給你-1的疑問的好處;-) – 2012-04-11 03:25:20
有沒有什麼建議如果我想在不降低尺寸的情況下縮小GIF文件大小,我該怎麼辦?只是一個關鍵字,它會對我有所幫助:) – Crazenezz 2012-04-11 03:34:39
正如所有的答案所說,你不能這樣做。 GIF文件已經被壓縮了,因爲它們可以得到。你可能會發現一種異常的壓縮算法,可以再擠1%,但這就是你將得到的所有東西。這是不值得的努力。如果你想要更多的壓縮,你應該檢查低質量設置的JPEG。 – 2012-04-11 03:39:31