¿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();
}
}
}