2014-03-03 4 views
2
File file = new File("result.csv"); 
FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
BufferedWriter bw = new BufferedWriter(fw); 

Что произойдет, если мы не закрываем объект буферизованной записи после завершения записи? Я имею в виду, что, если мы пропустим bw.close()?Java Buffered Writer

ответ

4

Если вы открываете много файлов, и если вы их не закрываете, ваша операционная система не сможет открывать больше файлов через некоторое время.

Кроме того, в то время как ваш BufferedWriter не был собран с мусором, файл, который он писал, останется открытым, насколько ваша операционная система. Если это Windows, вы не сможете удалить файл до тех пор, пока дескриптор файла не будет закрыт, либо BufferedWriter, наконец, будет собранным мусором, так и выходом JVM.

  • BufferedWriter.close() переполнить буфер в основной поток, так что если вы забыли flush() и не близко, ваш файл не может иметь весь текст вы написали к нему.

  • BufferedWriter.close() также закрывает обернутый писатель. Когда это FileWriter, это, в конечном счете, закроет FileOutputStream и сообщит ОС, что вы закончили запись в файл.

  • сборщик мусора будет автоматически вызывать close(), а не на BufferedWriter или обернутой FileWriter, но на FileOuputStream. Таким образом, ОС будет счастлива, но вы должны ждать GC.

  • Однако вы всегда хотите освободить ресурсы ОС, как только они вам больше не понадобятся. Это касается открытых файлов, соединений с базами данных, очередей печати ... всего. Поверь мне в этом.

  • BufferedWriter.close() очищает буфер внутренних символов, поэтому память будет доступна для сбора мусора, даже если сам объект BufferedWriter остается в области видимости.

Проверить here для более подробной информации

Смежные вопросы