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