Какова цель flush () в потоках Java? - PullRequest
106 голосов
/ 26 февраля 2010

В Java метод flush() используется в потоках. Но я не понимаю, какова цель использования этого метода?

fin.flush();

подскажите несколько предложений.

Ответы [ 6 ]

90 голосов
/ 26 февраля 2010

Из документов метода flush:

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

Буферизация в основном делается для улучшения производительности ввода / вывода. Подробнее об этом можно прочитать из этой статьи: Настройка производительности ввода-вывода Java .

25 голосов
/ 18 ноября 2013

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

21 голосов
/ 02 ноября 2012

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

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

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

7 голосов
/ 21 сентября 2016

Если буфер заполнен, все строки, которые в нем буферизуются, будут сохранены на диск. Буферы используются для того, чтобы избежать больших сделок! и накладные расходы.

В классе BufferedWriter, который находится в java-библиотеках, есть одна строка вроде:

private static int defaultCharBufferSize = 8192;

Если вы хотите отправить данные до того, как буфер заполнится, у вас есть контроль. Просто промой это. Вызывает writer.flush () и говорит: «Отправьте все, что есть в буфере, сейчас же!

справочник: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208

страниц: 453

4 голосов
/ 26 февраля 2010

К потокам часто обращаются потоки, которые периодически очищают свой контент и, например, отображают его на экране, отправляют в сокет или записывают в файл. Это сделано из соображений производительности. Очистка выходного потока означает, что вы хотите остановить, дождаться, когда содержимое потока будет полностью передано к месту назначения, а затем возобновить выполнение с пустым потоком и отправленным содержимым.

3 голосов
/ 04 апреля 2015

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

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