1

我最近在 SO 上问了这个问题:Grabbing JSON works from one link, not from another

我得到的答案基本上是说getContentLength服务器是可选的,所以我必须自己手动计算长度。好吧,我花了一些时间,但我想出了一些似乎得到正确计数的代码,但我不确定这是否是“正确”的方法。主要是因为我的while(0==0)陈述。

我得到的确切答案是:

content-length 是响应服务器设置的标头。它是可选的,谷歌选择不为动态生成的内容发送它(大多数服务器不发送)。因此,您必须读取流直到用完字节,而不是一口气完成。

所以这是我想出的代码:

Reader reader = new InputStreamReader(inputStream);
int contentLength=0;
int cur;
while (0==0){
cur = reader.read();
if (cur == -1) {
break;
} else {
contentLength++;
}
}

当服务器没有为您提供内容长度时,这似乎是一种可行的解决方案吗?

4

1 回答 1

0

您可以轻松计算服务器发送的内容的字节长度为InputStream2 行:

ByteArrayInputStream bais = new ByteArrayInputStream(inputStream);
int length = bias.toByteArray().length;

与您的方法相关:

int contentLength=0;
while (reader.read()>0){
contentLength++;
}

但是,在提到的问题中提出的答案会发生什么: int contentLength = connection.getContentLength();

那是完全合理和可行的。

于 2013-08-01T01:17:25.270 回答