Sobes.tech
Junior

Na czym polega zaleta buforowania?

sobes.tech AI

Odpowiedź od AI

Buforowanie w Java I/O zmniejsza liczbę odwołań do operacji wejścia/wyjścia niskiego poziomu, co znacznie zwiększa wydajność. Odczyt/zapis dużych bloków danych jednym wywołaniem systemowym jest bardziej efektywny niż wielokrotne małe operacje.

Podczas odczytu: BufferedInputStream odczytuje dane z podstawowego strumienia do pamięci buforowej. Gdy żądane są małe porcje danych, są one pobierane z bufora bez konieczności odwoływania się do źródła (dysk, sieć) za każdym razem. Dopiero gdy bufor się opróżni, następuje nowe odczytanie bloku danych.

Podczas zapisu: BufferedOutputStream najpierw zapisuje dane do bufora. Zapis do podstawowego strumienia następuje albo po zapełnieniu bufora, albo po wywołaniu metody flush(). Minimalizuje to liczbę wywołań systemowych podczas zapisu.

Zalety:

  • Zmniejszenie nakładów: Zmniejsza liczbę odwołań do OS i sprzętu.
  • Zwiększenie przepustowości: Dane są przesyłane dużymi blokami.
  • Poprawa wydajności: Całkowity czas operacji wejścia/wyjścia jest krótszy.

Przykład użycia BufferedInputStream:

import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try (FileInputStream fileInputStream = new FileInputStream("example.txt");
             BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream)) {

            int data;
            while ((data = bufferedInputStream.read()) != -1) {
                // Przetwarzanie odczytanego bajtu
                System.out.print((char) data);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}