Відповіді:
З документів цього flush
методу:
Промиває вихідний потік і змушує списати будь-які буферизовані вихідні байти. Загальний договір флеш-сигналу полягає в тому, що виклик є вказівкою на те, що якщо будь-які попередньо записані байти були буферизовані реалізацією вихідного потоку, такі байти повинні бути негайно записані до призначення.
Буферизація в основному проводиться для поліпшення продуктивності вводу / виводу. Більше про це можна прочитати з цієї статті: Налаштування продуктивності введення-виведення Java .
Коли ми даємо будь-яку команду, потоки цієї команди зберігаються в пам'яті, що називається буфер (тимчасове місце пам'яті) на нашому комп’ютері. Коли все тимчасове місце пам’яті заповнене, ми використовуємо flush (), який промиває всі потоки даних і виконує їх повністю і дає новий простір для нових потоків у тимчасовому розташуванні буфера. -Надіюсь, ти зрозумієш
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
і PrintXXX
класи. flush()
Метод будь-якого іншого потоку або Writer
нічого не робить.
flush()
Явний виклик не потрібно BufferedWriter
, якщо ви, close()
письменник. close()
виконує флеш сам.
close()
дзвінки flush()
, тому виклик обох є зайвим при використанні FileWriter
без буфера.
Коли ви записуєте дані в потік, вони записуються не відразу, а буферуються. Тому використовуйте, flush()
коли вам потрібно бути впевненим, що всі ваші дані з буфера записані.
Ми повинні бути впевнені, що всі записи завершені, перш ніж ми закриємо потік, і саме тому flush()
викликається у файлі / буферизованому авторі close()
.
Але якщо у вас є вимога зберегти всі записи будь-коли перед тим, як закрити потік, використовуйте flush()
.
FilterOutputStream
і FilterWriter
.
Якщо буфер заповнений, всі рядки, які буферизовані на ньому, вони будуть збережені на диску. Буфери використовуються для уникнення великих пропозицій! і накладні.
У класі BufferedWriter, розміщеному в java libs, є один рядок типу:
private static int defaultCharBufferSize = 8192;
Якщо ви хочете надсилати дані до заповнення буфера, у вас є контроль. Просто змийте його. Дзвінки письменнику.flush () кажуть: "Надішліть все, що є в буфері, зараз!
довідник: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
сторінки: 453
До потоків часто доступні потоки, які періодично спорожнюють їх вміст і, наприклад, виводять його на екран, надсилають у сокет або записують у файл. Це робиться з міркувань продуктивності. Промивання вихідного потоку означає, що ви хочете зупинитися, дочекайтеся повного перенесення вмісту потоку до місця призначення, а потім відновіть виконання з пустим потоком та відправленим контентом.
Для випуску продуктивності перші дані слід записувати в буфер. Коли буфер повністю заповнений, дані записуються на вихід (файл, консоль тощо). Коли буфер частково заповнений і ви хочете відправити його на вихід (файл, консоль), тоді вам потрібно вручну викликати метод flush (), щоб записати частково заповнений буфер для виведення (файл, консоль).