Можно ли flush() для небуферизированного потока и что будет?

Начинаю изучать тему IO и NIO.

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


Ответы (2 шт):

Автор решения: Barmaley

Как следует из описания flush():

This method forces any data that may have been buffered to be written to the underlying output device. Please note that the host environment might perform its own buffering unbeknowst to Java. In that case, a write made (for example, to a disk drive) might be cached in OS buffers instead of actually being written to disk.

В переводе на русский означает, что flush() вызывает чистку буфера вызывая метод реализованный в самой ОС поверх которой работает JVM. При этом даже отсутствие буфера в самом потоке не означает, что не будет использоваться в качестве буфера кэш диска на уровне ОСи или даже ниже.

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

→ Ссылка
Автор решения: Andrei

Мне кажется ответ уважаемого @Barmaley не корректен. Это мое оценочное суждение)

This method forces any data that may have been buffered to be written to the underlying output device. Please note that the host environment might perform its own buffering unbeknowst to Java. In that case, a write made (for example, to a disk drive) might be cached in OS buffers instead of actually being written to disk.

Мое понимание процитированной документации, что вызов метода flush() гарантирует только то, что байты, ранее записанные в поток, передаются операционной системе для записи, но не гарантирует записи на диск. Вот ссылка на верный по моему мнению ответ: FileOutputStream: Does the “close” method calls also “flush”?

→ Ссылка