Sobes.tech
Junior

¿En qué consiste la ventaja del buffering?

sobes.tech AI

Respuesta de la IA

La buffering en Java I/O reduce la cantidad de accesos a operaciones de entrada/salida de bajo nivel, lo que aumenta significativamente el rendimiento. Leer/escribir bloques grandes de datos en una sola llamada al sistema es más eficiente que múltiples operaciones pequeñas.

Al leer: BufferedInputStream lee datos del flujo base en la memoria buffer. Cuando se solicitan pequeñas porciones de datos, se toman del buffer sin necesidad de acceder a la fuente (disco, red) cada vez. Solo cuando el buffer se vacía, se realiza una nueva lectura de un bloque de datos.

Al escribir: BufferedOutputStream primero escribe datos en el buffer. La escritura en el flujo base ocurre cuando el buffer se llena o cuando se llama al método flush(). Esto minimiza la cantidad de llamadas al sistema para escribir.

Ventajas:

  • Reducción de costos adicionales: Disminuye la cantidad de accesos al SO y al hardware.
  • Aumento del ancho de banda: Los datos se transmiten en bloques grandes.
  • Mejora del rendimiento: El tiempo total de operaciones de entrada/salida se reduce.

Ejemplo de uso de 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) {
                // Procesamiento del byte leído
                System.out.print((char) data);
            }

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