во многих статьях говорится о том, что всегда следует закрывать потоки ввода/вывода, но для чего это следует делать? есть ли какие-то ограничения, что будет если никогда не закрывать 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, но повторное закрытие потока эффектов не вызывает. Ключевое это - Метод используется для высвобождения ресурсов, связанных с потоком
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости