Поток завершится, когда вызов readLine
вернет null
. Это происходит, когда читатель достигает «конца потока». Если BufferedReader
упаковывает входной поток, связанный с сокетом, то «конец потока» будет инициирован закрытием соединения с сокетом; например потому что удаленный клиент / сервер закрыл его.
Здесь нет кода для закрытия BufferedReader
. Он будет закрыт, если что-то еще вызовет close, или если объект BufferedReader
станет недоступным. В последнем случае считыватель и нижележащий сокетный поток и сокет будут в конечном итоге закрываться, когда GC завершит объекты.
У меня вопрос: это держит клиентский сокет открытым? Или сокет и, в конце концов, поток перестает работать, когда он завершил чтение из потока, или он будет продолжать ждать новых / новых сообщений / данных из клиентского сокета, даже после того, как он завершит чтение в первый раз?
Это зависит. Смотри выше.
Дело в том, что написанный код читает до тех пор, пока не останется больше читать. Нет, пока "это не сделано". Или, говоря иначе, «это сделано» ... тогда и только тогда, когда другой конец сообщает об этом, закрывая поток.