Метод flush
Метод flush класса Writer принудительно записывает все данные, накопленные в буфере, в базовый поток вывода. Класс Writer является абстрактным базовым классом для всех символьных потоков вывода в Java, и многие его наследники (например, BufferedWriter, FileWriter, OutputStreamWriter) используют внутреннюю буферизацию для повышения производительности. Метод flush не принимает параметров и не возвращает значения. После вызова flush данные гарантированно передаются в нижележащий поток, однако сам поток остаётся открытым и может использоваться дальше.
Важно понимать, что метод flush не закрывает поток. Для полного освобождения ресурсов необходимо дополнительно вызвать метод close, который, как правило, сам вызывает flush перед закрытием.
Синтаксис
writer.flush()
Пример
Давайте запишем строку в файл через BufferedWriter и вызовем flush, чтобы убедиться, что данные попали в файл до закрытия потока:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try (BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt")))
{
writer.write("abcde");
writer.flush();
System.out.println("Data flushed successfully");
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Data flushed successfully"
Пример
Давайте рассмотрим пример с StringWriter, который не требует файловой системы. Запишем данные и вызовем flush, а затем получим содержимое буфера:
import java.io.StringWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try
{
StringWriter writer = new StringWriter();
writer.write("12345");
writer.flush();
String res = writer.toString();
System.out.println(res);
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"12345"
Пример
Давайте запишем несколько строк через BufferedWriter и после каждого вызова write будем выполнять flush, чтобы данные сразу попадали в целевой поток:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt")))
{
writer.write("abcde");
writer.flush();
System.out.println("First part flushed");
writer.write("12345");
writer.flush();
System.out.println("Second part flushed");
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"First part flushed"
"Second part flushed"