通过尝试使用资源关闭套接字

时间:2012-10-18 20:19:31

标签: java sockets bufferedreader try-with-resources

我正在尝试编写一些具有以下基本形式的简单套接字代码 -

try(BufferedReader request = new BufferedReader(new InputStreamReader(sock.getInputStream()))){
//Do some work...
}
//BufferedReader gets closed, but also makes the socket close
...
...
response.write(blah);//Causes exception because socket is closed

我的问题是套接字正在关闭,但我不认为它应该是。 try-with-resources创建一个BufferedReader,然后在我离开try块时自动关闭它,但由于某种原因它也会关闭整个套接字!因此,当我稍后使用相同的套接字获得我的响应代码时,我得到一个异常。有没有什么办法解决这一问题?或者我只是不必使用try-with-resources(这将不太理想)?

2 个答案:

答案 0 :(得分:6)

BufferedReader.close()关闭了后备流。

解决方法是"包装"没有传播close()

的流

答案 1 :(得分:1)

代码:

new BufferedReader(
   new InputStreamReader(
      sock.getInputStream()))

将套接字流包装到一个包含在BufferedReader中的读取器中,但它是唯一的流。