Как распаковать ответ API вызова в Java?

#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> .