La clase BufferedReader en Java es una herramienta fundamental para leer datos de texto desde distintas fuentes de manera eficiente. Esta clase lee texto desde un flujo de entrada de caracteres, almacenando los caracteres en un búfer para proporcionar una lectura optimizada de caracteres, arreglos y líneas de texto. Dado que esta clase extiende de Reader, cada petición de lectura causa una petición de lectura del flujo de entrada, por lo que es aconsejable envolverla con otras clases como InputStreamReader o FileReader, según el propósito de la lectura.
Configuración del flujo de entrada
Para obtener datos del usuario a través del teclado, Java utiliza el campo estático in de la clase java.lang.System. Este flujo representa la entrada estándar y suministra datos en forma de bytes. Sin embargo, como los elementos de este flujo son caracteres individuales y no cadenas de texto, es necesario utilizar un objeto de InputStreamReader inicializado con System.in para convertir los bytes leídos en caracteres.
Toda esta teoría se resume en la creación de un objeto de la siguiente manera:
BufferedReader bufer = new BufferedReader(new InputStreamReader(System.in));
En esta estructura, el InputStreamReader funciona como un "puente" entre el flujo de bytes y el flujo de caracteres, mientras que el BufferedReader actúa como un área de almacenamiento o "cubeta" donde se recogen los datos recuperados del flujo de entrada.
Lea también: IVA 21% Excel
Lectura de datos línea a línea
Una vez creado el objeto BufferedReader, el proceso para obtener una cadena de texto es muy sencillo. Solo se necesita invocar al método readLine, el cual regresa un objeto tipo String:
entrada = bufer.readLine();
Esta operación permite capturar todo lo que el usuario escriba hasta que presione la tecla Enter. Es importante destacar que la petición del método readLine puede lanzar una excepción, por lo que es necesario indicarlo agregando la cláusula throws IOException en el encabezado del método main y realizar la importación correspondiente: import java.io.IOException;.
Consideraciones importantes
- Solo es necesario declarar un objeto BufferedReader una sola vez; este objeto se utilizará tantas veces sea necesario para obtener datos de entrada.
- El método readLine() siempre retorna un String. Si necesita trabajar con números, debe leer primero como cadena y luego utilizar métodos de conversión como Integer.parseInt().
- El tamaño del búfer puede configurarse específicamente al instanciar la clase, o utilizar el valor predeterminado, que es suficientemente grande para la mayoría de los casos.
Comparativa de clases de lectura
Para comprender mejor las utilidades de estas herramientas, observe la siguiente tabla comparativa:
- InputStreamReader: Actúa como puente entre el flujo de bytes y el flujo de caracteres.
- BufferedReader: Proporciona una lectura eficiente mediante búfer y permite leer líneas completas.
- FileReader: Implementación específica para leer caracteres desde archivos de texto.
Aunque existen otras opciones como Scanner, el uso de BufferedReader para leer datos línea a línea es una de las formas más simples, eficientes y comunes para manejar datos en Java, especialmente cuando se requiere capturar oraciones completas o procesar archivos de texto de manera secuencial.
Lea también: Guía IVA reducido
Lea también: ¿Cómo localizar tus XML del SAT?
