Сокет закрывается попыткой с ресурсами

Я пытаюсь написать простой код сокета, который имеет следующую базовую форму -

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, но по какой-то причине он также закрывает весь сокет! Поэтому, когда я позже перейду к своему коду ответа, который использует тот же сокет, я получаю исключение. Есть ли способ исправить это? Или мне просто нужно не использовать попытку с ресурсами (что было бы не идеально)?


person David says Reinstate Monica    schedule 18.10.2012    source источник


Ответы (2)


BufferedReader.close () закрывает резервный поток.

Обойти эту проблему можно с помощью «оборачивающего» потока, который не передает close ()

person Stephen Connolly    schedule 18.10.2012
comment
Вы случайно не знаете, какие потоки не распространяют close ()? - person David says Reinstate Monica; 19.10.2012
comment
Нет в среде выполнения java. Вам нужно будет написать свой собственный - person Stephen Connolly; 19.10.2012
comment
BufferedReader.close () закрывает резервный поток ... и закрытие входного или выходного потока сокета закрывает другой поток и сам сокет. - person user207421; 19.10.2012

Код :

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

оберните поток сокета в считыватель, завернутый в BufferedReader, но это единственный поток.

person Aubin    schedule 18.10.2012