apache commons 使用 7zip 压缩

问题描述 投票:0回答:1

我正在尝试使用从 apache commons 压缩示例网页获得的以下代码,使用 SevenZ 类创建一个 zip 文件,希望它比常规 java zip 压缩速度更快。这就是我的代码的样子

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
    BufferedInputStream instream = new BufferedInputStream(new FileInputStream("c:/temp/test.txt"));

    SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("c:/temp/7ztest.zip"));
    SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(new File("c:/temp/test.txt"),"blah.txt");
    sevenZOutput.putArchiveEntry(entry);
    byte[] buffer = new byte[1024];
    int len;
    while ((len = instream.read(buffer)) > 0) {sevenZOutput.write(buffer, 0, len);}

    sevenZOutput.closeArchiveEntry();
    sevenZOutput.close();
    instream.close();
    }catch(IOException ioe) {
        System.out.println(ioe.toString());

    }
}

我收到了这个看起来无关的错误

线程“main”中的异常 java.lang.NoClassDefFoundError: org.tukaani.xz.FilterOptions 在 java.lang.J9VMInternals.verifyImpl(本机方法) 在 java.lang.J9VMInternals.verify(J9VMInternals.java:93)

我导入了 apache 包

导入 org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry; 导入 org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;

但不确定 org.tukaani.xz.FilterOptions 是什么,它看起来不像是 apace commons 压缩的一部分。有什么想法吗?

apache zip compression 7zip apache-commons-compress
1个回答
32
投票

编辑 2024-03-30:维护者似乎对 XZ 库进行了非常严重的妥协。在未首先验证漏洞是否已得到解决的情况下,请勿使用依赖项:

CVE-2024-3094

如 Apache Commons 的“已知限制”页面所述:

“该格式需要其他可选的 XZ for Java 库。”

此依赖项对于其他格式是可选的,但对于 7zip 则需要它。

<dependency>
  <groupId>org.tukaani</groupId>
  <artifactId>xz</artifactId>
  <version>1.5</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.