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