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

Posted

技术标签:

【中文标题】在 Java 中对多个文件使用 LZ4 压缩【英文标题】:Using LZ4 Compression in Java for multiple files 【发布时间】:2020-10-26 19:58:18 【问题描述】:

我正在尝试将多个文件压缩到一个存档中,但使用我当前的代码,它只会将其压缩到 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);
    

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于在 Java 中对多个文件使用 LZ4 压缩的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上编译 LZ4 压缩库

LZ4压缩算法简介

LZ4压缩算法简介

LZ4压缩算法简介

PostgreSQL 14中TOAST的新压缩算法LZ4,它有多快?

lucene LZ4 会将doc存储在一个chunk里进行Lz4压缩 ES的_source便如此