Как GZip распаковать сжатые строковые данные с помощью Java-кода

#java #gzip

Вопрос:

У меня есть код для распаковки gzip сжатой строки, как показано ниже:

 public static String decompress(String compressedString) throws IOException {  byte[] byteCompressed = compressedString.getBytes(StandardCharsets.UTF_8)  final StringBuilder outStr = new StringBuilder();  if ((byteCompressed == null) || (byteCompressed.length == 0)) {  return "";  }  if (isCompressed(byteCompressed)) {  final GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(byteCompressed));  final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gis, "UTF-8"));   String line;  while ((line = bufferedReader.readLine()) != null) {  outStr.append(line);  }  } else {  outStr.append(byteCompressed);  }  return outStr.toString();  }  
 public static boolean isCompressed(final byte[] compressed) {  return (compressed[0] == (byte) (GZIPInputStream.GZIP_MAGIC)) amp;amp; (compressed[1] == (byte) (GZIPInputStream.GZIP_MAGIC gt;gt; 8));  }  

Я использую этот код для распаковки строки, как показано ниже: h4siaaaaaaaahnjlqtjls4balwlilohaaaa

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

Кто-нибудь может помочь мне дать правильный код для распаковки? Спасибо

Ответ №1:

Ваша строка-это данные gzip в кодировке base64, поэтому вам нужно декодировать ее в base64, вместо того, чтобы пытаться закодировать ее как UTF-8 байт.

 String input = "H4sIAAAAAAAAAHNJLQtJLS4BALwLiloHAAAA"; byte[] byteCompressed = Base64.getDecoder().decode(input); // ... rest of your code