English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java Array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Colección Map de Java

Java Set colección

Java Entrada Salida (I/)

Java Reader/Writer

Otras temáticas de Java

Clase Java InputStreamReader

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.

crea un InputStreamReader

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.

Métodos de InputStreamReader

La clase InputStreamReader proporciona implementaciones de diferentes métodos que existen en la clase Reader.

Método read()

  • 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().

método getEncoding()

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().

método close()

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.

otros métodos de InputStreamReader

métododescripció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