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

Posted

技术标签:

【中文标题】在 Java 中使用 xz 压缩时如何获得均匀压缩?【英文标题】:How to get uniform compression while using xz compression in Java? 【发布时间】:2015-05-24 09:15:25 【问题描述】:

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

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();
    


【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于在 Java 中使用 xz 压缩时如何获得均匀压缩?的主要内容,如果未能解决你的问题,请参考以下文章

使用 apache common compress/org.tukaani.xz 在 java 中解码 LZMA 压缩 zip 文件的问题

如何在python3中使用lzma(* .warc.xz)压缩warc记录?

tar.xz文件如何解压

tar.xz文件如何解压

如何使用 7z SDK 压缩和解压 XZ 文件

如何使用 Python 3 将 lzma2 (.xz) 和 zstd (.zst) 文件解压缩到文件夹中?