Я работаю в устаревшем приложении Java. Во многих файлах используются сокеты и потоки, где сокеты закрываются, но не потоки, необходимо закрыть все потоки перед закрытием сокета. потому что я получаю «слишком много ошибок открытых файлов», это ошибка из-за не закрытия потоков .....Закрывает ли розетка закрытием потока?
Закрытие сокета также автоматически закрывает потоки?
2
A
ответ
5
От Socket
Javadoc:
Закрытие этого сокета также закрыть сокет
InputStream
иOutputStream
.
Как правило, закрытие сокета должно быть достаточно, чтобы закрыть оба потока, которые он создал.
«Слишком много ошибок открытых файлов», скорее всего, вызвано чем-то другим.
2
Закрытие любого из них закрывает два других, но вы должны закрыть внешний выходной поток (или Writer
), который вы обернули вокруг сокета. Это закрывает входной поток и сокет. Если вы не закрываете внешний выходной поток самостоятельно, он не покраснеть, и вы потеряете данные. Вы также можете закрыть сам сокет в блоке finally
: на самом деле недостаток блоков finally
может стать причиной вашей проблемы.