GZIPOutputStream проблема с моим классом, который расширяет OutputStream - PullRequest
0 голосов
/ 21 ноября 2018

У меня следующая проблема.Я написал класс Stream, который расширяет OutputStream.Вот код:

import java.io.IOException;
import java.io.OutputStream;

public class ToUpperLetterOutputStream extends OutputStream {
    public OutputStream outputStream;

    public ToUpperLetterOutputStream(OutputStream outputStream)
    {
        this.outputStream =  outputStream;
    }

    @Override
    public void write(int b) {
        char ch  = toUpper((char)b);
        try {
            outputStream.write((int)ch);
        } catch (IOException e) {
            System.err.println("IO ERROR");
        }
    }

    protected char toUpper(int b)
    {
        char ch = (char)b;
        if (Character.isLowerCase(b))
        {
            ch = Character.toUpperCase(ch);
        }

        return ch;
    }
}

Теперь я пытаюсь использовать свой поток с GZIPOutputStream:

    byte[] bytes = stringBuilder.toString().getBytes();

    try (
            GZIPOutputStream g =  new GZIPOutputStream( new ToUpperLetterOutputStream(
                    new FileOutputStream("result"))))  {

                    g.write(bytes, 0, bytes.length);
                    g.finish();

    } catch (FileNotFoundException e) {
        System.err.println("Nie znaleziono pliku");
    } catch (IOException e) {
        System.err.println("IO Error");
    }

Программа работает нормально, но когда я пытаюсь распаковать мой файл результатов,Я получаю следующее исключение:

java.util.zip.ZipException: invalid literal/lengths set
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at Test.decompressGzipFile(Test.java:36)
at Test.main(Test.java:50)

Когда я не использую свой поток, распаковка работает нормально.Почему это происходит и что я должен изменить, чтобы этот код был правильным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...