如何解决如何在Java中解压缩调用API响应?
我想解压缩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();
}
解决方法
您的问题出在调用decompress()之前的代码中,因此您应该编辑问题以显示如何获得此流。
解决后,您会发现decompress()
会删除行尾,从而使结果字符串在一行上。这可能无效-取决于您正在阅读的格式。
如果需要保留UTF-8编码的GZIP字符串的格式,则可以用StringWriter替换BufferedReader和StringBuilder,如下所示:
public static String decompress(byte[] compressed) throws IOException {
try(GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(compressed));
InputStreamReader r = new InputStreamReader(gis,"UTF-8"))
{
StringWriter sb = new StringWriter(compressed.length * 3 / 2);
r.transferTo(sb);
return sb.toString();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。