【发布时间】:2011-10-08 16:15:25
【问题描述】:
正如标题所示,我正在尝试从 HTTP 请求中获取并压缩字符串。
urlConn = url.openConnection();
int len = CONTENT_LENGTH
byte[] gbytes = new byte[len];
gbuffer = new GZIPInputStream(urlConn.getInputStream(), len);
System.out.println(gbuffer.read(gbytes)+"/"+len);
System.out.println(gbytes);
result = new String(gbytes, "UTF-8");
gbuffer.close();
System.out.println(result);
使用一些 URL,它可以正常工作。我得到这样的输出:
42/42
[B@96e8209
The entire 42 bytes of my data. Abcdefghij.
对于其他人,它给了我类似以下的输出:
22/77
[B@1d94882
The entire 77 bytes of
如您所见,前几个奇数字节的数据非常相似,如果不相同的话,因此它们不应该导致这些问题。我真的无法确定它。增加CONTENT_LENGTH 并没有帮助,而且大小比给我问题的数据流更大或更小的数据流都可以正常工作。
编辑:问题也不在于原始 gzip 压缩数据,因为 Cocoa 和 Python 都可以毫无问题地对其进行压缩。
编辑:已解决。包括最终代码:
urlConn = url.openConnection();
int offset = 0, len = CONTENT_LENGTH
byte[] gbytes = new byte[len];
gbuffer = new GZIPInputStream(urlConn.getInputStream(), len);
while(offset < len)
{
offset += gbuffer.read(gbytes, offset, offset-len);
}
result = new String(gbytes, "UTF-8");
gbuffer.close();
【问题讨论】:
标签: java http gzip bytearray inputstream