Sobes.tech
Junior

Kuo naudingas buferiavimas?

sobes.tech AI

Atsakymas iš AI

Java I/O buferizacija sumažina prieigų prie žemo lygio įvesties/išvesties operacijų skaičių, kas žymiai padidina našumą. Didelių duomenų blokų skaitymas/rašymas vienu sisteminiu iškvietimu yra efektyvesnis nei daugybė smulkių operacijų.

Skaitant: BufferedInputStream nuskaitys duomenis iš pagrindinio srauto į buferinę atmintį. Kai prašoma mažų duomenų porcijų, jos paimamos iš buferio, nereikalaujant kreiptis į šaltinį (diską, tinklą) kiekvieną kartą. Tik kai buferis išsenka, įvyksta naujas duomenų bloko skaitymas.

Rašant: BufferedOutputStream pirmiausia įrašo duomenis į buferį. Rašymas į pagrindinį srautą įvyksta arba užpildžius buferį, arba iškvietus metodą flush(). Tai sumažina sisteminių iškvietimų skaičių.

Privalumai:

  • Mažesnės išlaidos: sumažėja prieigos prie OS ir įrangos skaičius.
  • Padidėjęs pralaidumas: duomenys perduodami dideliais blokais.
  • Padidėjęs našumas: bendras įvesties/išvesties operacijų laikas sumažėja.

Pavyzdys, kaip naudoti 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) {
                // Apdorojamas nuskaitytas baitas
                System.out.print((char) data);
            }

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