Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Для чего нужен метод close в классе InputStream?

#java


во многих статьях говорится о том, что всегда следует закрывать потоки ввода/вывода,
но для чего это следует делать?
есть ли какие-то ограничения, что будет если никогда не закрывать inputstream/outputstream?
    


Ответы

Ответ 1



Если InputStream не закрывать, то в теории ничего фатального не произойдет, ну будут лишние ресурсы болтаться, ну и ладно. Если у вас богато с ними, то можно пережить. А вот не закрытие OutputStream это грозит фатальными последствиями. Самая распространенная история - это недописанный последний буфер. Классика жанра открываем файл и пишем какую-нибудь туфту, типа: byte[] buffer; //blah-blah FileOutputStream fos=new FileOutputStream(new File("test.file")) { fos.write(buffer); Если не закрыть FileOutputStream, то с вероятностью 99% последние несколько килобайт (или байт - зависит от ОС) не будут дописаны в файл test.file Метод OutputStream.close() - вызывает еще дополнительно метод flush() - буквально смыв внутреннего буфера - то есть дозаписывает "остатки". Так что без close() будет трудновато (ну если только не делать вместо close() все время flush())

Ответ 2



Закрытие ранее открытого потока чтения. Метод используется для высвобождения ресурсов, связанных с потоком (таких как дескрипторы открытых файлов). Любые попытки обращения к закрытому потоку приводят к выбрасыванию исключения типа IOException, но повторное закрытие потока эффектов не вызывает. Ключевое это - Метод используется для высвобождения ресурсов, связанных с потоком

Комментариев нет:

Отправить комментарий