我正在尝试编写一些具有以下基本形式的简单套接字代码 -
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(这将不太理想)?
答案 0 :(得分:6)
BufferedReader.close()关闭了后备流。
解决方法是"包装"没有传播close()
的流答案 1 :(得分:1)
代码:
new BufferedReader(
new InputStreamReader(
sock.getInputStream()))
将套接字流包装到一个包含在BufferedReader中的读取器中,但它是唯一的流。