Распаковка строки с использованием Java.util.zip.Inflater - PullRequest
3 голосов
/ 19 марта 2012

Я пытаюсь декодировать полученную строку. Это сжато, используя дефлятор здесь: https://github.com/dankogai/js-deflate А затем base64 кодируется.

Однако, когда я использую Java-инфлятор, я получаю следующее сообщение об ошибке: неизвестный метод сжатия.

    import sun.misc.BASE64Decoder;

    public void org() throws Exception{
    BASE64Decoder decoder = new BASE64Decoder();

    try {      

         String inputString = "84VWAVDY";
         byte[] decodedByteArray = decoder.decodeBuffer(inputString);

         // Decompress the bytes
         Inflater decompresser = new Inflater();
         decompresser.setInput(decodedByteArray);
         byte[] result = new byte[100];

         int resultLength = decompresser.inflate(result);
         decompresser.end();

         // Decode the bytes into a String
         String outputString = new String(result, 0, resultLength);
         System.out.println("OUTPUT:" + outputString);

    } catch (Exception e){
        System.out.println("Exception: " + e);
    }
}

Этот код в основном является копией / вставкой из Java API. Я также пытался использовать новый Inflater (правда); Т.е. сейчасрап

"Примечание. При использовании опции nowrap также необходимо предоставить дополнительный« фиктивный »байт в качестве входного значения. Это требуется собственной библиотекой ZLIB для поддержки определенных оптимизаций."

Так, где этот фиктивный байт должен быть добавлен? В начале или в конце "byte [] decodedByteArray"?

Так есть идеи, как решить эту проблему? Должен ли я только добавить фиктивный байт, мне нужно использовать некоторые другие методы и т. Д.?

Ну, вот и все, вся помощь очень ценится!

Привет

John

Ответы [ 2 ]

4 голосов
/ 20 марта 2012

Декодирование base64 "84VWAVDY" (f3 85 56 01 50 d8) не является ни допустимым необработанным потоком сдувания, ни действительным упакованным (zlib, или gzip) потоком сдувания. Поэтому, несмотря ни на что, вы не будете удовлетворены, пытаясь раздуть эти данные.

4 голосов
/ 20 марта 2012

Пустой байт будет добавлен в конце. Однако это необходимо только для zlib 1.1.4 и более ранних версий. Текущие версии zlib не нужны. Я не уверен, какая версия zlib используется java.util.zip.

...