Por qué BufferedReader
Lecturas con búfer y sin búfer
Por qué BufferedReader es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Lectura de entrada en Java
La mayoría de los programas reales necesitan entrada del usuario: un nombre, un número o un comando. Java ofrece varias formas de leer la entrada, pero una de las más comunes y eficientes es BufferedReader.
En esta lección aprenderá por qué existe BufferedReader y cuándo conviene utilizarlo.
De dónde proviene la entrada
Cuando escribe en una consola, el texto entra a través de System.in. Este es un flujo de bytes de bajo nivel: proporciona bytes sin procesar, no texto legible.
Para convertir esos bytes en caracteres legibles y líneas completas, envolvemos System.in en clases auxiliares. BufferedReader es el envoltorio que facilita esta tarea.
Qué significa «Buffered»
Leer un byte cada vez desde el teclado o un archivo es lento. Un búfer es un bloque de memoria que contiene muchos caracteres a la vez.
BufferedReader llena este búfer en bloques grandes y después le entrega los datos rápidamente. Menos accesos al flujo subyacente implican un mejor rendimiento, especialmente con entradas grandes.
Configuración de dos capas
BufferedReader no puede leer System.in directamente porque ese flujo proporciona bytes. Primero lo envolvemos en un InputStreamReader, que convierte los bytes en caracteres.
System.in→ bytesInputStreamReader→ caracteresBufferedReader→ líneas almacenadas en búfer
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);La línea clásica
Verá esta línea exacta en casi todos los programas Java que leen la entrada de la consola. Encadena ambos envoltorios en una sola instrucción.
Recuerde: el InputStreamReader interno se encarga de convertir bytes en caracteres, mientras que el BufferedReader externo añade el almacenamiento en búfer y el práctico método readLine().
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));Importaciones necesarias
Estas clases se encuentran en el paquete java.io, por lo que debe importarlas al principio del archivo.
La lectura de la entrada puede fallar, por lo que los métodos lanzan IOException; también deberá importarla o gestionarla, como se explica más adelante.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;BufferedReader frente a Scanner
Los principiantes suelen conocer primero Scanner. Es más sencillo de usar (puede analizar números directamente), pero es más lento.
- Scanner: análisis sencillo, mayor sobrecarga.
- BufferedReader: más rápido, lee líneas completas, pero usted debe analizar los números.
Para entradas grandes o programación competitiva, BufferedReader ofrece mayor velocidad.
Lectura de una línea completa
El método principal es readLine(). Lee todo lo que escribe el usuario hasta que pulsa Enter y lo devuelve como un String (sin el salto de línea).
Si no queda más entrada, readLine() devuelve null. Exploraremos este caso en la próxima lección.
String name = br.readLine();
System.out.println("Hello, " + name);Un programa completo de lectura
A continuación se muestra un programa completo. Lee una línea y saluda al usuario. Observe throws IOException en main: es una forma rápida de dejar que los errores de entrada se propaguen durante el aprendizaje.
Este fragmento espera la entrada del teclado, por lo que aquí no se puede ejecutar automáticamente, pero es Java válido.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
System.out.println("Hi " + name);
}
}No se necesita entrada para comprobar que funciona
Para comprobar que los envoltorios existen y se compilan, aquí tiene una versión ejecutable que no lee nada: simplemente confirma que el objeto se ha creado.
En una aplicación real llamaría a readLine(), pero esta versión imprime un mensaje para que pueda ejecutarla ahora mismo.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("BufferedReader is ready!");
}
}Cuándo usar BufferedReader
Use BufferedReader cuando:
- lea muchas líneas o archivos grandes;
- le importe la velocidad;
- quiera trabajar con texto sencillo línea por línea.
Use Scanner en su lugar cuando quiera analizar números rápidamente y la entrada sea pequeña. Ambas opciones son válidas: elija la herramienta adecuada.
Comprobación rápida
Compruebe que entiende la configuración de BufferedReader.
Resumen
Ha aprendido que System.in es un flujo de bytes, envuelto primero por InputStreamReader (de bytes a caracteres) y después por BufferedReader (almacenamiento en búfer y readLine()).
El almacenamiento en búfer mejora el rendimiento, y BufferedReader resulta especialmente útil para entradas grandes o basadas en líneas. Siguiente tema: lectura detallada de líneas.
Preguntas frecuentes
¿La lección «Por qué BufferedReader» es gratis?
Sí — el texto completo de «Por qué BufferedReader» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Por qué BufferedReader»?
Lecturas con búfer y sin búfer Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Por qué BufferedReader»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué BufferedReader
- Lectura de líneas
- Análisis de números de la entrada
- Cierre seguro de streams