如何在 Java 中使用 xz 压缩时获得均匀压缩?

How to get uniform compression while using xz compression in Java?

我正在 Java 中尝试 xz 压缩。使用 xz 1.5 压缩库、commons io 2.4 库和 commons compress 1.8.1 库。我尝试 运行 下面的代码给出了非常不一致的结果。文本超过 70%,音频和视频文件低于 0.1% (1-compressed/original * 100)。我在每次压缩之前都使用制作压缩包。这应该只适用于文本文件吗?

package makexz;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.compress.compressors.CompressorOutputStream;
import org.apache.commons.compress.compressors.CompressorStreamFactory;
import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream;
import org.apache.commons.compress.utils.IOUtils;

public class MakeXZ {

public static void main(String[] args) throws FileNotFoundException, IOException, Exception {

        FileOutputStream dest = new         FileOutputStream("C://TARDUMP//XZ//newvid.tar.xz");
    CompressorOutputStream cos = new     CompressorStreamFactory().createCompressorOutputStream(CompressorStreamFactory.XZ, dest);
        String input = "C://TARDUMP//newvid.tar";
        IOUtils.copy(new FileInputStream(input), cos);
        cos.close();
    }

}

您所看到的完全是意料之中的。只有当数据具有可以检测和利用的冗余时,才可以压缩数据。音频和视频文件已经压缩。它们中没有冗余可供 xz 利用。文本文件中有大量冗余可供利用。