#java #string #api #gzip #response
#java #строка #API #gzip #ответ
Вопрос:
Я хочу распаковать ответ API (заголовок: Accept-encoding=gzip
).
Вот строки, которые я пробовал, но всегда терпел неудачу из-за:
java.util.zip.ZipException: Not in GZIP format
String entity = response.readEntity(String.class);
// When I print "entity" I will get Compress message as below:
��{o�ʒ��
���c^MC��������ut4"�ms���fWGگ�_o?�V�G�ę�=�PF�3��i�������ɚ���G�[�eEA����$��M�(�rW�nk��97�m�r��6�$�$T�a^ZaIj�"�5U�4�����4:oW�C{�-��A�c0�hސ�*l���JP�ƚ.������t�
}ˏ�r�kIxjk��!���m�0��Z�9 ���r[�����6!٦^fQ�X_d)hބe���m��RP�Y��Xg�:�F�IEE�5]U��f�jϋ�?N�ߖ�<�κ;� ��j�xQ�{����40�]4N�NOib�=o(r�mL�rLϱ�>Rۖ�l4
{2jʁk��f�*�љw��a�l���������^�V�a�ӱ���w[2�V>n��'��n���;�ȧ�#�p-ch}<>�9>�IB�~X��X���=��lz9)H��2#O?�R����*�����q�c�V�t����c�ܩ<��A��[���4
��
byte[] input = entity.getBytes();
// helper method
public static String decompress(byte[] compressed) throws IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
// Always failed at "GZIPInputStream" line due to java.util.zip.ZipException: Not in GZIP format
GZIPInputStream gis = new GZIPInputStream(bis);
BufferedReader br = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
gis.close();
bis.close();
return sb.toString();
}
Комментарии:
1. Если ответ может предоставить byte[] напрямую, используйте это, а не stream-> String-> byte[] , или, если он может предоставить вам InputStream, тогда измените на распаковку (InputStream bis) вместо этого. Также вы потеряете разрывы строк в выходных данных, когда они будут преобразованы обратно в строку (если в потоке была строка UTF-8)
2. спасибо за ваш ответ. Он не возвращает строку или байт. Это захватывающий метод, и он возвращает список<JsonNode> .