Не удалось сжать и распаковать файлы с помощью сжатия LZMA - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь реализовать сжатие и распаковку LZMA, используя commons-compress. Ниже приводится зависимость, которую я использую.

 <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.20</version>
</dependency>

Ниже приведен код для сжатия:

private byte[] compress(byte[] content) throws IOException {
    LZMA2Options options = new LZMA2Options();
    options.setPreset(LZMA2Options.PRESET_MAX);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(content.length);
    LZMAOutputStream outputStream = new LZMAOutputStream(byteArrayOutputStream, options, -1L);
    outputStream.write(content);
    outputStream.finish();
    outputStream.close();
    return byteArrayOutputStream.toByteArray();
}

Ниже приведен код для распаковки:

public static byte[] decompressLzmaStream(byte[] compressedBytes, int size) throws IOException {

    try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(compressedBytes)) {
        return decompressLzmaStream(byteArrayInputStream, size);
    }
}

public static byte[] decompressLzmaStream(InputStream inputStream, int size) throws IOException {

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(size);
    LZMACompressorInputStream lzmaInputStream = new LZMACompressorInputStream(inputStream);
    int length;
    while (-1 != (length = lzmaInputStream.read(buffer))) {
        byteArrayOutputStream.write(buffer, 0, length);
    }
    lzmaInputStream.close();
    byteArrayOutputStream.flush();
    return byteArrayOutputStream.toByteArray();
}

Но когда я пытаюсь открыть распакованный файл, он показывает malformed file, может ли кто-нибудь подсказать, что именно я делаю не так?

...