Sobes.tech
Junior

V čem spočívá výhoda vyrovnávací paměti?

sobes.tech AI

Odpověď od AI

Bufferování v Java I/O snižuje počet přístupů k nízkoúrovňovým operacím vstupu/výstupu, což výrazně zvyšuje výkon. Čtení/zápis velkých bloků dat v jednom systémovém volání je efektivnější než opakované malé operace.

Při čtení: BufferedInputStream načítá data z hlavního proudu do vyrovnávací paměti. Pokud jsou požadovány malé části dat, jsou brány z bufferu bez nutnosti přístupu ke zdroji (disk, síť) pokaždé. Teprve když buffer dojde, načte se nový blok dat.

Při zápisu: BufferedOutputStream nejprve zapisuje data do bufferu. Zápis do hlavního proudu probíhá buď při naplnění bufferu, nebo při volání metody flush(). To minimalizuje počet systémových volání při zápisu.

Výhody:

  • Snížení dodatečných nákladů: Snižuje počet přístupů k OS a hardwaru.
  • Zvýšení propustnosti: Data jsou přenášena ve velkých blocích.
  • Zlepšení výkonu: Celkový čas operací vstupu/výstupu se zkracuje.

Příklad použití 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) {
                // Zpracování načteného bajtu
                System.out.print((char) data);
            }

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