繁体   English   中英

在 Java 中对多个文件使用 LZ4 压缩

[英]Using LZ4 Compression in Java for multiple files

我正在尝试将多个文件压缩到一个存档中,但是使用我当前的代码,它只会将其压缩到 zip 中的单个 blob 中。 有谁知道如何用 LZ4 分割文件?

public void zipFile(File[] fileToZip, String outputFileName, boolean activeZip)
{
    try (FileOutputStream fos = new FileOutputStream(new File(outputFileName), true);
            LZ4FrameOutputStream lz4fos = new LZ4FrameOutputStream(fos);)
    {
        for (File a : fileToZip)
        {
            try (FileInputStream fis = new FileInputStream(a))
            {
                byte[] buf = new byte[bufferSizeZip];
                int length;
                while ((length = fis.read(buf)) > 0)
                {
                    lz4fos.write(buf, 0, length);                                             
                }
            }
        }
    }
    catch (Exception e)
    {
        LOG.error("Zipping file failed ", e);
    }
}

LZ4算法与LZMA接近。 如果您可以使用LZMA ,那么您可以使用LZMA压缩创建zip存档。

List<Path> files = Collections.emptyList();
Path zip = Paths.get("lzma.zip");

ZipEntrySettings entrySettings = ZipEntrySettings.builder()
                                                 .compression(Compression.LZMA, CompressionLevel.NORMAL)
                                                 .lzmaEosMarker(true).build();
ZipSettings settings = ZipSettings.builder().entrySettingsProvider(fileName -> entrySettings).build();

ZipIt.zip(zip)
     .settings(settings)
     .add(files);

请参阅zip4jvm中的详细信息

LZ4 压缩字节流。 您需要将多个文件归档到单个归档文件中,例如 Tar 归档文件,然后将其输入 LZ4 压缩器。

我创建了一个 Java 库来为您执行此操作https://github.com/spoorn/tar-lz4-java

如果您想自己实现它,这里有一个技术文档,其中包含有关如何使用来自 Apache Commons 的 TarArchive 和 lz4-java 的 LZ4 压缩目录的详细信息:https ://github.com/spoorn/tar-lz4-java/blob/主/SUMMARY.md#lz4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM