4

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

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 (这不太理想)?

4

2 回答 2

6

BufferedReader.close() 关闭后备流。

解决方法是不传播 close() 的“包装”流

于 2012-10-18T20:22:09.220 回答
1

编码 :

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

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

于 2012-10-18T20:22:56.053 回答