org.tukaani.xz.CorruptedInputException:在 java 中提取 7z 存档文件时压缩数据已损坏

org.tukaani.xz.CorruptedInputException: Compressed data is corrupt while extracting 7z archive File in java

正在获取 org.tukaani.xz.CorruptedInputException:提取 7z 文件时出现压缩数据损坏错误。我正在使用 common-compress-1.21.jar 和 xz-1.9.jar.here 是我的代码

    File f = new File("/home/local/Documents/7zFile/7zFile.7z");
    InputStream inputStream;
    ArchiveEntry entry = null;
    try {
        inputStream = new FileInputStream(f);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    if (!inputStream.markSupported()) {
        inputStream = new BufferedInputStream(inputStream);
    }
       
    inputStream.mark(Integer.MAX_VALUE);
    byte[] inputData = IOUtils.toByteArray(inputStream);
    inputStream.reset();
    SeekableInMemoryByteChannel channel = new              
                                   SeekableInMemoryByteChannel(inputData);        
    sevenZFile = new SevenZFile(channel);
            while ((sevenZFile!=null && (entry = sevenZFile.getNextEntry()) != null)) {
                             System.out.print(entry.getName());                                  
            }

stackTrace 错误

org.tukaani.xz.CorruptedInputException: Compressed data is corrupt
at org.tukaani.xz.LZMAInputStream.read(Unknown Source)
at org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:88)
at org.apache.commons.compress.utils.IOUtils.copyRange(IOUtils.java:330)
at org.apache.commons.compress.utils.IOUtils.copyRange(IOUtils.java:301)
at org.apache.commons.compress.utils.IOUtils.readRange(IOUtils.java:350)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.readEncodedHeader(SevenZFile.java:706)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.initializeArchive(SevenZFile.java:544)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.readHeaders(SevenZFile.java:474)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:343)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:255)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:183)
at org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(SevenZFile.java:167)

在这一行中 sevenZFile = new SevenZFile(channel); 它的抛出错误。

我已经在 ubuntu OS 中为这个文件创建了 7z 存档文件,它抛出异常,我创建在线网站的 7z 存档工作正常。 ubuntu 有什么问题吗?以及如何解决这个问题? 提前致谢。

LZMA 数据有流结束标记。这样的 .7z 文件是有效的,但并不常见。 XZ for Java 1.9 专门增加了一个特性。请找到这个 link 以便更好地理解。 https://issues.apache.org/jira/browse/COMPRESS-591

https://sourceforge.net/p/lzmautils/discussion/708858/thread/822d80d5ea/