我的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都无法执行(似乎无限等待)
答案 0 :(得分:1)
BufferReader.close()
只会关闭inputStream,而inputStream又会调用inputStream.close()
。根据java api InputStream.close()
什么也没做。您需要关闭套接字,或者您正在通过httpEntity
抽象出来的任何内容。