English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderemos con ejemplos sobre Java InputStreamReader y sus métodos.
La clase InputStreamReader del paquete java.io se puede usar para convertir datos de bytes en datos de caracteres.
Hereda de la clase abstracta Reader.
La clase InputStreamReader trabaja junto con otros flujos de entrada. También se conoce como el puente entre el flujo de bytes y el flujo de caracteres. Esto se debe a que InputStreamReader lee bytes como caracteres desde el flujo de entrada.
Por ejemplo, ciertos caracteres necesitan2un byte para almacenar en la memoria. Para leer este tipo de datos, podemos usar un lector de flujo de entrada, que lee2un byte y convertirlo en el carácter correspondiente.
Para crear un InputStreamReader, debemos importar el paquete java.io.InputStreamReader. Después de importar el paquete, podemos crear un lector de flujo de entrada.
//Crear un InputStream FileInputStream file = new FileInputStream(String path); //crea un InputStreamReader InputStreamReader input = new InputStreamReader(file);
En el ejemplo anterior, creamos un InputStreamReader llamado input y un FileInputStream llamado file.
Aquí, los datos del archivo se almacenan utilizando ciertas codificaciones de caracteres predeterminadas.
Pero también podemos especificar el tipo de codificación de caracteres del archivoUTF8oUTF16)
//Crear un InputStreamReader, especificar la codificación de caracteres InputStreamReader input = new InputStreamReader(file, Charset cs);
Aquí, usamos la clase Charset para especificar la codificación de caracteres del archivo.
La clase InputStreamReader proporciona implementaciones de diferentes métodos que existen en la clase Reader.
read() - Lee un solo carácter desde el lector
read(char[] array) - Lee caracteres desde el lector y los almacena en el array especificado
read(char[] array, int start, int length) - Lee un número de caracteres igual a length desde el lector y los almacena comenzando en el índice especificado en el array designado
Por ejemplo, supongamos que tenemos un archivo llamado}}input.txtel archivo, que contiene el siguiente contenido.
Esta es una línea de texto dentro del archivo.
Intentemos usar el lector InputStreamReader para leer este archivo.
import java.io.InputStreamReader; import java.io.FileInputStream; class Main { public static void main(String[] args) { //crea un array de caracteres char[] array = new char[100]; try { //crea un FileInputStream FileInputStream file = new FileInputStream("input.txt"); //crea un InputStreamReader InputStreamReader input = new InputStreamReader(file); //lee caracteres desde el archivo input.read(array); System.out.println("los datos del flujo:"); System.out.println(array); //cerrar reader input.close(); } catch(Exception e) { e.getStackTrace(); } } }
resultado de salida
los datos del flujo: Esta es una línea de texto dentro del archivo.
En el ejemplo anterior, hemos creado un lector de flujo de entrada utilizando un flujo de entrada de archivo. El lector de flujo de entrada está asociado con el archivoinput.txtenlace.
FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file);
Para leer caracteres de un archivo, hemos utilizado el método read().
el método getEncoding() se puede usar para obtener el tipo de codificación utilizado para almacenar datos en el flujo de entrada. Por ejemplo,
import java.io.InputStreamReader; import java.nio.charset.Charset; import java.io.FileInputStream; class Main { public static void main(String[] args) { try { //crea un FileInputStream FileInputStream file = new FileInputStream("input.txt"); //crea un InputStreamReader con la codificación por defecto InputStreamReader input1 = new InputStreamReader(file); //crea un InputStreamReader con la codificación especificada InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8"); //devuelve la codificación de caracteres del flujo de entrada System.out.println("input1la codificación de caracteres: " + input1.getEncoding()); System.out.println("input2la codificación de caracteres: " + input2.getEncoding()); //cerrar reader input1.close(); input2.close(); } catch(Exception e) { e.getStackTrace(); } } }
resultado de salida
input1la codificación de caracteres: Cp1252 input2la codificación de caracteres: UTF8
En el ejemplo anterior, creamos dos lectores de flujo de entrada, respectivamente denominados input1yinput2.
input1no se especificó la codificación de caracteres. Por lo tanto, el método getEncoding() devuelve el nombre normativo de la codificación de caracteres predeterminada.
input2especificar la codificación de caracteresUTF8. Por lo tanto, el método getEncoding() devuelve el nombre normativo de la codificación de caracteres especificada.
Nota: ya hemos especificado el tipo de codificación de caracteres con el método Charset.forName().
Para cerrar el lector de flujo de entrada, podemos usar el método close(). Después de llamar a este método close(), ya no podremos usar el lector para leer datos.
método | descripción |
---|---|
ready() | comprobar si el flujo está listo para ser leído |
mark() | marcar la posición de datos leídos en el flujo |
reset() | restablecer puntos de marca |