Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tar.gz';不适用于GIF文件_Java_File_Compression - Fatal编程技术网

Java tar.gz';不适用于GIF文件

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

我正在尝试制作一个程序,将文件压缩到.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);
            }
        }
    }
}
我把它用作图书馆

I在两种条件下进行试验:

  • 压缩GIF文件
  • 压缩PDF文件
  • 我比较了压缩使用,结果如下:

  • 上面的代码,PeaZip,文件输入“>
  • 上面的代码,PeaZip,文件输入“>
  • 如果输入文件是GIF,则压缩文件的大小会增加,如果使用GIF,则相同。但对于另一个文件,它在压缩过程中起作用。

    有人能解释一下这会发生什么吗?我的代码有问题吗


    感谢您的帮助…

    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