Класс BufferedWriter
Класс BufferedWriter из пакета java.io
предназначен для буферизованной записи символов
в выходной поток. Вместо того чтобы каждый раз
обращаться к диску или сети при записи одного
символа, класс накапливает данные во внутреннем
буфере и сбрасывает их в целевой поток большими
порциями. Это значительно повышает
производительность операций ввода-вывода.
В первый параметр конструктора мы передаем
объект Writer, в который будет
производиться запись. Вторым необязательным
параметром можно передать размер буфера
в символах. По умолчанию размер буфера
составляет 8192 символа.
Класс наследуется от абстрактного класса
Writer и реализует все его методы,
добавляя к ним метод newLine для
записи разделителя строк, а также собственную
реализацию flush для принудительного
сброса буфера в целевой поток.
Синтаксис
BufferedWriter bw = new BufferedWriter(Writer out);
BufferedWriter bw = new BufferedWriter(Writer out, int size);
Пример
Давайте запишем несколько строк в файл
с помощью BufferedWriter:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try (BufferedWriter bw = new BufferedWriter(
new FileWriter("test.txt")))
{
bw.write("abcde");
bw.newLine();
bw.write("12345");
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
После выполнения кода файл test.txt
будет содержать две строки:
"abcde"
"12345"
Пример
Давайте запишем данные в буфер и принудительно
сбросим их в целевой поток с помощью метода
flush:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try (BufferedWriter bw = new BufferedWriter(
new FileWriter("test.txt")))
{
bw.write("abcde");
bw.flush();
bw.write("12345");
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Метод flush немедленно записывает
содержимое буфера в файл, не дожидаясь
его заполнения. После выполнения кода файл
test.txt будет содержать:
"abcde12345"
Пример
Давайте запишем символы по одному и проверим, что данные попадают в файл только после закрытия потока:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try (BufferedWriter bw = new BufferedWriter(
new FileWriter("test.txt")))
{
String str = "abcde";
for (int i = 0; i < str.length(); i++)
{
bw.write(str.charAt(i));
}
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Благодаря буферизации пять вызовов метода
write не приводят к пяти обращениям
к диску. Данные записываются одной операцией
при закрытии потока в блоке try-with-resources.
В результате файл test.txt содержит:
"abcde"
Смотрите также
-
класс
Writer,
базовый класс для всех символьных потоков записи -
класс
FileWriter,
который записывает символы в файл -
класс
BufferedReader,
который выполняет буферизованное чтение символов -
метод
flush,
который сбрасывает буфер в целевой поток