Разница между функцией сброса и закрытия в случае filewriter в Java - PullRequest
36 голосов
/ 14 февраля 2012

Мне нужно знать, какова точная разница между функциями сброса и закрытия в Java?

А Когда данные записываются в файл во время записи файла?

Пожалуйста, предоставьте один пример

Ответы [ 4 ]

63 голосов
/ 14 февраля 2012

flush() просто гарантирует, что любые буферизованные данные будут записаны на диск (в данном случае - в более общем случае, сбрасываются через любой канал ввода-вывода, который вы используете). Вы все еще можете писать в поток (или записывающее устройство) впоследствии.

close() сбрасывает данные и указывает, что данных больше нет . Он закрывает любые файловые дескрипторы, сокеты или что угодно. После этого вы больше не можете писать в поток (или записывающее устройство).

Обратите внимание, что без вызовов flush() данные могут быть все еще записаны на соответствующий канал ввода-вывода - просто некоторые данные могут быть буферизованы.

close() обычно также вызывает flush(), но недавно мне было указано, что в некоторых реализациях JDK любые исключения, выбрасываемые путем сброса при закрытии, проглатываются: (

38 голосов
/ 14 февраля 2012

flush () записывает содержимое буфера в место назначения и делает буфер пустым для дальнейшего хранения данных, но не закрывает поток навсегда.Это означает, что вы все еще можете записать еще несколько данных в поток.

Но close () постоянно закрывает поток.Если вы хотите записать некоторые данные дальше, вам придется снова открыть поток и добавить данные к уже существующим.

4 голосов
/ 14 февраля 2012

flush() сбрасывает содержимое буфера в место назначения. И вы можете снова что-то записать в поток. close() сбрасывает содержимое в место назначения и закрывает поток. После close() вы больше ничего не можете писать.

3 голосов
/ 14 февраля 2012

flush(): для очистки выходного потока используйте метод void flush() класса DataOutputStream. Этот метод внутренне вызывает flush() метод базового OutputStream класса, который принудительно записывает любые буферизованные выходные байты в поток.

close(): обычно закрывает поток, соединение, сокет.

См. flush и close пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...