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ブロックを離れると自動的に閉じますが、何らかの理由でソケット全体も閉じます。したがって、後で同じソケットを使用する応答コードに到達すると、例外が発生します。これを修正する方法はありますか?または、リソースを試してみる必要はありませんか(理想的とは言えません)?

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 に答える