我很难理解我的应用程序出了什么问题。下面显示的是第一次成功执行的代码(先前HttpResponse
,然后是第二次调用,挂起dataInputStream.readFully(...)
行。
doSomething(HttpResponse response) {
HttpEntity responseBody = response.getEntity();
long len = responseBody.getContentLength();
byte[] payload = new byte[(int)len]; // <-- I've confirmed this is the correct length
DataInputStream d = null;
try {
InputStream bais = responseBody.getContent();
d = new DataInputStream(bais);
d.readFully(payload); // <-- *** HANGS HERE! ***
EntityUtils.consume(responseBody);
...
} finally {
if (d != null) {
IOUtils.closeQuietly(d);
}
}
}
在阻止/挂起10秒以上后,应用程序超时并且调用线程被拆除。
response
对象,并确认其内容长度符合预期。 DataInputStream
Javadoc。IOUtils.closeQuietly(...)
电话。 [相信我在这里:]很难跟踪我们的集成系统此应用程序的初始失败,因此我无法确认此finally
块是否引入了任何意外行为。据我所知,调用closeQuietly()
有推荐的方法。 更新:为清楚起见,此代码是执行HTTP RANGED GET请求的应用程序的一部分。例如,首先response
从字节0开始下拉 N 字节。第二个调用GET下一个 N 字节。该文件很大,因此有两个以上必要的RANGED GET。