Comparación de Características
| Característica | Scanner | BufferedReader |
|---|---|---|
| Facilidad de uso | Más simple y directo para leer distintos tipos de datos (nextInt(), nextLine(), etc.) |
Solo lee texto como String, se necesita Integer.parseInt() para números. |
| Velocidad | Más lento | Más rápido, especialmente con muchos datos. |
| Parsers incluidos | Sí, métodos como nextInt(), nextDouble(), etc. |
No, debes convertir manualmente (Integer.parseInt()). |
| Lectura de líneas | Con nextLine()
|
Con readLine()
|
| Uso con consola | Ideal para programas interactivos | Menos cómodo, requiere más código. |
| Sincronización | No sincronizado | Sincronizado (thread-safe). |
Ejemplo Comparativo
Con Scanner
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = sc.nextLine();
System.out.print("Enter your age: ");
int age = sc.nextInt();
System.out.println("Hello " + name + ", age " + age);
}
}
Con BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
String name = br.readLine();
System.out.print("Enter your age: ");
int age = Integer.parseInt(br.readLine());
System.out.println("Hello " + name + ", age " + age);
}
}
¿Cuál deberías usar?
Usa Scanner si:
- Estás haciendo prácticas de algoritmos en consola.
- En programas donde la facilidad de lectura es más importante que la velocidad.
Usa BufferedReader si:
- Necesitas máximo rendimiento (por ejemplo, al leer grandes cantidades de datos).
- Estás haciendo parsing de archivos grandes o input de alta velocidad en línea.
