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

159
06 июля 2019, 03:20

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

Answer 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())

Answer 2

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

READ ALSO
apache-poi неверно сохраняются вложения

apache-poi неверно сохраняются вложения

Суть проблемы - есть шаблонныйdocx, внутри которого есть вложение test

164
Привязка операции “=” к клавише Enter.

Привязка операции “=” к клавише Enter.

Пишу простой GUI калькулятор с возможностью ввода значений с клавиатуры на javaОпределение требуемой операции реализовал таким образом:

159
Парсинг страницы java

Парсинг страницы java

Как я могу запарсить полную веб страницу если там имеется кнопка "Показать еще"? Парсю с помощью jsoupНа скрине показаны атрибуты кнопки

156