#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