Java tar.gz';不适用于GIF文件
我正在尝试制作一个程序,将文件压缩到.tar.gz: 代码如下:Java tar.gz';不适用于GIF文件,java,file,compression,Java,File,Compression,我正在尝试制作一个程序,将文件压缩到.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.com
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);
}
}
}
}
我把它用作图书馆
I在两种条件下进行试验:
感谢您的帮助…
GIF
文件已经被压缩(使用LZW),因此再次压缩不会有太大的改进(这是信息论的基本“定律”)
事实上,您可能会发现文件大小增加了,因为虽然您无法再压缩数据,但仍然需要添加另一层压缩控制信息
这可能就是你的情况。
GIF
文件已经被压缩(使用LZW),因此再次压缩不会有多大改进(这是信息论的基本“定律”)
事实上,您可能会发现文件大小增加了,因为虽然您无法再压缩数据,但仍然需要添加另一层压缩控制信息
这可能就是您的情况。只有在内容可以压缩的情况下,压缩才有效。大多数GIF文件已经经过LZW压缩,所以它们通常不会压缩太多;一旦包含归档头和压缩数据表,净更改就是文件大小的增加。许多PDF文件也被压缩,所以你经常看到同样的情况发生;在这种情况下,PDF足够大,GZip压缩(同一LZW算法的稍新版本)可以找到更多的压缩内容。压缩只有在内容可以压缩的情况下才有效。大多数GIF文件已经经过LZW压缩,所以它们通常不会压缩太多;一旦包含归档头和压缩数据表,净更改就是文件大小的增加。许多PDF文件也被压缩,所以你经常看到同样的情况发生;在这种情况下,PDF文件足够大,GZip压缩(同一LZW算法的稍新版本)可以找到更多要压缩的文件。GIF和PDF文件通常都已经很好地压缩了,所以LZW算法(如果我没记错的话,在boh Zip和GZip中使用)无法从中获得更多
想象一下,如果每个文件都可以压缩。然后我们可以一遍又一遍地运行
gzip
,直到文件像我们想要的那样小:-)GIF和PDF文件通常都已经被很好地压缩了,所以LZW算法(如果我记得正确的话,在boh Zip和gzip中使用)无法从中获得更多
想象一下,如果每个文件都可以压缩。然后我们可以反复运行
gzip
,直到文件像我们希望的那样小:-)根据您使用的压缩算法,您将得到不同的结果——每种类型的文件压缩不同。例如,文本文件的压缩效果非常好。此外,由于GIF文件已经使用LZW压缩进行了压缩,因此第二次压缩几乎没有效果
在维基百科中,“GIF图像使用Lempel-Ziv-Welch(LZW)无损数据压缩技术进行压缩,以减少文件大小而不降低视觉质量。”
有关更多信息,请参阅。根据您使用的压缩算法,您将得到不同的结果--每种类型的文件压缩方式不同。例如,文本文件的压缩效果非常好。此外,由于GIF文件已经使用LZW压缩进行了压缩,因此第二次压缩几乎没有效果 在维基百科中,“GIF图像使用Lempel-Ziv-Welch(LZW)无损数据压缩技术进行压缩,以减少文件大小而不降低视觉质量。”
有关更多信息,请参阅。欢迎使用SO+1对于一个写得好、记录得好的问题。我可能还应该-1,因为不用谷歌搜索这个,因为它是压缩的一个众所周知的特性,它只工作一次。正如所有答案所指出的,压缩已经压缩的东西可能会使它变大,而不是变小。但是我会告诉你关于-1;-)的疑问如果我想在不降低尺寸的情况下减小GIF文件大小,有什么建议吗?只是一个关键词,它会对我有帮助:)正如所有的答案所说,你不能这样做。GIF文件已经尽可能地压缩了。你可能会发现一种奇特的压缩算法,可以再压缩1%,但这就是你将得到的全部。这不值得努力。如果你想要更多的压缩,你应该调查低质量设置的JPEG。谢谢你的帮助Jim:-)请注意JPEG是“有损的”——它会永久性地丢弃图像中的信息,但可以获得更高的压缩因子,这取决于你能容忍的图像退化程度。欢迎使用+1对于一个写得好、记录得好的问题。我可能还应该-1,因为不用谷歌搜索这个,因为它是压缩的一个众所周知的特性,它只工作一次。正如所有答案所指出的,压缩已经压缩的东西可能会使它变大,而不是变小。但是我会告诉你关于-1;-)的疑问如果我想在不降低尺寸的情况下减小GIF文件大小,有什么建议吗?只是一个关键词,它会对我有帮助:)正如所有的答案所说,你不能这样做。GIF文件已经尽可能地压缩了。你可能会发现一种奇特的压缩算法,可以再压缩1%,但这就是你将得到的全部。不是w