Буферизація символьних потоків. BufferedReader та BufferedWriter

Прокрутити вниз


Буферизація символьних потоків в Java забезпечується класами BufferedReader та BufferedWriter. Ці класи використовують внутрішні буфери для підвищення ефективності роботи з текстовими файлами. Завдяки буферизації читання та запис даних відбуваються не по одному символу, а блоками, що значно покращує продуктивність при роботі з великими обсягами текстових даних.

BufferedReader

BufferedReader — це клас, що дозволяє буферизоване читання символів, рядків і масивів символів із потоку. Він обгортає інший об’єкт Reader (наприклад, FileReader) і зчитує великі блоки даних за один раз, а не окремі символи.

Основні методи:

  • read() — зчитує один символ або масив символів.
  • readLine() — зчитує весь рядок до символа нового рядка.
  • ready() — перевіряє, чи готовий потік до читання (повертає true, якщо є символи для читання).
  • close() — закриває потік і звільняє ресурси.

Приклад використання BufferedReader:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader(“example.txt”))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line); // Виводимо кожен рядок файлу
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

У цьому прикладі метод `readLine()` зчитує рядок за рядком із файлу, що значно зручніше для роботи з текстовими даними.

BufferedWriter

BufferedWriter забезпечує буферизований запис символів у вихідний потік, наприклад, у файл. Він обгортає інший об’єкт Writer (наприклад, FileWriter) і зберігає дані у внутрішньому буфері, перш ніж записати їх у файл. Це зменшує кількість операцій запису і підвищує ефективність роботи.

Основні методи:

  • write(String s) — записує рядок або масив символів у буфер.
  • newLine() — додає символ нового рядка (автоматично визначає потрібний формат залежно від операційної системи).
  • flush() — примусово записує вміст буфера у файл.
  • close() — закриває потік і записує всі дані з буфера.

Приклад використання BufferedWriter:

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(“Hello, BufferedWriter!”);
writer.newLine(); // Додаємо новий рядок
writer.write(“Це приклад буферизованого запису.”);
} catch (IOException e) {
e.printStackTrace();
}
}
}

У цьому прикладі метод write() записує рядки у файл, а newLine() автоматично додає символ нового рядка залежно від операційної системи. flush() викликається автоматично при закритті потоку, тому немає потреби викликати його вручну.

Переваги буферизації:

1. Підвищення проуктивності: Буферизовані потоки читають і записують блоки даних, зменшуючи кількість операцій введення/виведення.
2. Зручна робота з рядками: Класи BufferedReader і BufferedWriter забезпечують зручні методи для роботи з рядками (readLine() та newLine()).
3. Ефективне використання ресурсів: Менша кількість операцій введення/виведення зменшує навантаження на систему.

Використання буферизованих потоків:

Буферизовані потоки зазвичай використовують разом із класами `FileReader` і `FileWriter` для роботи з текстовими файлами:

BufferedReader reader = new BufferedReader(new FileReader(“example.txt”));
BufferedWriter writer = new BufferedWriter(new FileWriter(“output.txt”));

Підсумок:

  • BufferedReader підходить для ефективного читання текстових даних, зокрема зручний для читання файлів рядок за рядком.
  • BufferedWriter забезпечує ефективний запис текстових даних, дозволяючи зменшити кількість операцій запису завдяки буферизації.
  • Буферизація збільшує продуктивність за рахунок зменшення кількості операцій введення/виведення на диск.

Буферизація символьних потоків. BufferedReader та BufferedWriter