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

ответ

6

BufferedReader.close() закрывает поддерживающий поток.

Способ обойти это «обертывание» поток, который не распространяется на близко()

+0

Вы случайно не знаете, какие потоки не распространяют close()? –

+2

Отсутствует в среде Java. Вам нужно будет написать свой собственный –

+0

«BufferedReader.close() закрывает поток поддержки» ... и закрытие либо входного, либо выходного потока сокета закрывает другой поток и сам сокет. – EJP

1

Код:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^