во многих статьях говорится о том, что всегда следует закрывать потоки ввода/вывода, но для чего это следует делать? есть ли какие-то ограничения, что будет если никогда не закрывать inputstream/outputstream?
Если 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()
)
Закрытие ранее открытого потока чтения. Метод используется для высвобождения ресурсов, связанных с потоком (таких как дескрипторы открытых файлов). Любые попытки обращения к закрытому потоку приводят к выбрасыванию исключения типа IOException, но повторное закрытие потока эффектов не вызывает. Ключевое это - Метод используется для высвобождения ресурсов, связанных с потоком
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Суть проблемы - есть шаблонныйdocx, внутри которого есть вложение test
Пишу простой GUI калькулятор с возможностью ввода значений с клавиатуры на javaОпределение требуемой операции реализовал таким образом:
Как я могу запарсить полную веб страницу если там имеется кнопка "Показать еще"? Парсю с помощью jsoupНа скрине показаны атрибуты кнопки