无法在错误响应时关闭http流

时间:2010-11-02 16:57:12

标签: java apache httpclient inputstream bufferedreader

我的apache HTTP客户端正在从服务器读取数据,该服务器正在向我们发送HTTP流(以分块数据的形式)。

我有一个输入流和Buffered Reader来获取数据,并使用Buffered Data readLine方法读取这些数据。

InputStream inputStream = httpEntity.getContent();
br= new BufferedReader(new InputStreamReader(inputStream));

while ((line = br.readLine()) != null) 

如果我从服务器收到错误的响应,我想关闭连接。

为此我在一个时间间隔创建一个时间任务来关闭我的连接。 我每次收到响应时都会解析响应以检查响应是否正确,如果响应正确,则重置时间任务。如果在这种情况下我发现错误的响应,我不会重置timertask(并让timertask执行到之前设置的时间)

我想知道使用无缓冲I / O是否有帮助?或者我还需要其他方法吗?

我发现问题是因为连接已打开,我的timertask无法关闭连接。 inputStream.close或bufferReader.close都无法执行(似乎无限等待)

1 个答案:

答案 0 :(得分:1)

BufferReader.close()只会关闭inputStream,而inputStream又会调用inputStream.close()。根据java api InputStream.close()什么也没做。您需要关闭套接字,或者您正在通过httpEntity抽象出来的任何内容。