我正在尝试将程序压缩到.tar.gz:
以下是代码:
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个条件:
答案 0 :(得分:3)
GIF和PDF文件一般都已经很好地压缩了,所以LZW算法(如果我没记错的话,在boh Zip和GZip中使用)不能得到更多。
想象一下,如果每个文件都可以压缩。然后我们可以一遍又一遍地运行gzip
,直到文件尽可能小: - )
答案 1 :(得分:3)
根据您使用的压缩算法,您将获得不同的结果 - 每种类型的文件压缩方式都不同。例如,文本文件压缩得非常好。此外,由于GIF文件已经使用LZW压缩进行了压缩,因此第二次压缩应该几乎没有效果。
来自维基百科,“使用Lempel-Ziv-Welch(LZW)无损数据压缩技术压缩GIF图像,以减小文件大小而不降低视觉质量。”
有关详细信息,请参阅http://en.wikipedia.org/wiki/Graphics_Interchange_Format。
答案 2 :(得分:2)
GIF
文件已经压缩(使用LZW),因此通过再次压缩它们将无法获得很大的改进(这是信息理论的基本“法则”)。 / p>
事实上,您可能很好发现文件大小增加,因为虽然您无法再将数据压缩,但仍需要添加另一层压缩控制信息。
这可能就是你的情况。
答案 3 :(得分:2)
压缩仅在内容可以压缩时有效。大多数GIF文件已经被LZW压缩,因此它们通常不会压缩得更多;一旦包含存档标头和压缩数据表,净更改就是文件大小的增加。许多PDF文件也被压缩,所以你经常会看到相同的情况;在这种情况下,PDF足够大,GZip压缩(相同LZW算法的稍微更新版本)可以找到更多来挤出。