2013-07-18 1 views
2
  1. Я работаю в устаревшем приложении Java. Во многих файлах используются сокеты и потоки, где сокеты закрываются, но не потоки, необходимо закрыть все потоки перед закрытием сокета. потому что я получаю «слишком много ошибок открытых файлов», это ошибка из-за не закрытия потоков .....Закрывает ли розетка закрытием потока?

  2. Закрытие сокета также автоматически закрывает потоки?

ответ

5

От Socket Javadoc:

Закрытие этого сокета также закрыть сокет InputStream и OutputStream.

Как правило, закрытие сокета должно быть достаточно, чтобы закрыть оба потока, которые он создал.

«Слишком много ошибок открытых файлов», скорее всего, вызвано чем-то другим.

2

Закрытие любого из них закрывает два других, но вы должны закрыть внешний выходной поток (или Writer), который вы обернули вокруг сокета. Это закрывает входной поток и сокет. Если вы не закрываете внешний выходной поток самостоятельно, он не покраснеть, и вы потеряете данные. Вы также можете закрыть сам сокет в блоке finally: на самом деле недостаток блоков finally может стать причиной вашей проблемы.