Java InputStreamReader Explicado: Métodos, Codificación y Ejemplos Prácticos
Java InputStreamReader Explicado
Descubre cómo InputStreamReader de Java conecta flujos de bytes a flujos de caracteres, sus métodos principales y cómo manejar la codificación correctamente.
La clase InputStreamReader en java.io convierte bytes sin procesar en caracteres, haciéndola esencial para leer archivos de texto, flujos de red o cualquier fuente basada en bytes que represente caracteres.
Extiende la clase abstracta Reader y actúa como un puente entre flujos de bytes (ej., FileInputStream) y flujos de caracteres.
Cuando un carácter requiere múltiples bytes—como texto codificado en UTF-8 o UTF-16—InputStreamReader lee esos bytes juntos y produce el carácter correcto.
Crear un InputStreamReader
Comienza importando la clase necesaria:
import java.io.InputStreamReader;
La instanciación típica usa un FileInputStream como fuente de bytes subyacente:
FileInputStream archivo = new FileInputStream("ejemplo.txt");
InputStreamReader reader = new InputStreamReader(archivo);
Si conoces la codificación del archivo, especifícala para evitar malinterpretaciones:
InputStreamReader reader = new InputStreamReader(archivo, Charset.forName("UTF-8"));
Usar Charset garantiza que el reader interprete los bytes usando el conjunto de caracteres previsto.
Métodos Principales de InputStreamReader
read()
int read()– Lee un solo carácter.int read(char[] cbuf)– Llena un array con caracteres.int read(char[] cbuf, int off, int len)– Lee hastalencaracteres encbufcomenzando enoff.
Ejemplo: Leyendo un archivo de texto en un array de caracteres.
import java.io.*;
class Main {
public static void main(String[] args) {
char[] buffer = new char[100];
try (FileInputStream archivo = new FileInputStream("input.txt");
InputStreamReader reader = new InputStreamReader(archivo)) {
reader.read(buffer);
System.out.println("Datos en el flujo:\n" + new String(buffer));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Salida
Datos en el flujo: Esta es una línea de texto dentro del archivo.
getEncoding()
Recupera la codificación usada por el reader:
InputStreamReader readerPorDefecto = new InputStreamReader(archivo);
InputStreamReader readerUtf8 = new InputStreamReader(archivo, Charset.forName("UTF-8"));
System.out.println("Codificación por defecto: " + readerPorDefecto.getEncoding());
System.out.println("Codificación UTF-8: " + readerUtf8.getEncoding());
Salida
Codificación por defecto: Cp1252 Codificación UTF-8: UTF-8
Cuando no se especifica codificación, getEncoding() retorna el charset por defecto de la plataforma.
Nota: Usa Charset.forName() para codificaciones explícitas. Para más detalles, consulta la documentación de Java Charset.
close()
Siempre cierra el reader después de usarlo. La construcción try-with-resources de arriba lo maneja automáticamente, pero también puedes llamar a reader.close() explícitamente.
Otros Métodos Útiles
| Método | Descripción |
|---|---|
ready() | Verifica si el flujo está listo para lectura. |
mark(int readAheadLimit) | Marca la posición actual para restablecerla después. |
reset() | Retorna a la última posición marcada. |
Para una referencia completa, visita la página oficial de InputStreamReader.
Java
- Palabra clave final en Java: Variables, métodos y clases
- Operador instanceof en Java: Guía completa
- Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
- Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
- Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
- Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
- Dominando Java Scanner: Guía Completa con Ejemplos Prácticos
- Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
- Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación