Java, como muchos idiomas modernosprogramación, admite la implementación de flujos de entrada de datos. En Java, InputStream es la clase base para las secuencias de bytes. Esta clase es abstracta, es decir, en el proceso del programa no podemos crear su instancia. Sin embargo, en el paquete io, hay muchas clases que heredan y amplían la funcionalidad de InputStream. Para utilizar esta clase en su código, debe importarlo desde el paquete java.io.InputStream. A continuación, veremos la funcionalidad básica proporcionada por la clase InputStream, así como las clases principales que la implementan.

Métodos para la clase InputStream

Antes de proceder a un estudio detalladométodos de la clase InputStream, se debe mencionar que implementa las interfaces CerrarCable y AutoCloseable. La interfaz de Closeable nos dice que al cerrar el hilo, debe estar cerrado. Esto se hace usando el método close (). Dado que la mayoría de los métodos de la clase InputStream en caso de un error genera un tipo de excepción IOException, todas las operaciones necesarias para llevar a cabo un bloque try y un método close () finalmente hacer una unidad de forma que se activa en función del resultado de la operación para el cuerpo tratar.

La interfaz AutoCloseable reduce significativamentela cantidad de código técnico, porque permite que el método close () funcione automáticamente y no agregue un bloque finally a su código. Si se utiliza la versión séptimo o posterior de Java, un InputStream se puede colocar en la llamada intento con recursos de la cual todas las operaciones para cerrar el flujo se hace cargo.

java inputstream a la cadena

Considere los métodos principales de la clase InputStream:

  • int available () - Devuelve el número de bytes disponibles para la lectura;
  • int read () - toma del recurso el byte actual y lo devuelve en la representación entera; si se leen todos los bytes, devuelve -1;
  • int read (byte [] buffer) - lee los bytes disponibles enbúfer especificado como una matriz de tipo byte (el número de bytes leídos es igual al tamaño del búfer especificado; devuelve el número de bytes que se leyeron; si se leen todos los bytes disponibles, devuelve -1);
  • int read (byte [] buffer, int offset, intnúmero de bytes) - sobrecarga del método anterior, hace lo mismo, pero con la posición indicada en el "desplazamiento" y lee tantos como se especifica en el "número de bytes";
  • salto largo (número largo de bytes): omite el número especificado de bytes y devuelve el número real de bytes.

InputStream es implementado por varias clases, diseñadas para trabajar con diferentes fuentes y tipos de datos. El árbol de la herencia se presenta a continuación.

java inputstream

Leyendo archivos

Transmisión de bytes para leer información de archivosimplementado por la clase FileInputStream. Para abrir un archivo para leer bytes, es suficiente crear una instancia de esta clase, pasando el nombre del archivo al constructor como argumento. Si el archivo con el nombre dado no existe, se lanzará una excepción de tipo FileNotFoundException.

En caso de una apertura exitosa de un archivo, el trabajo con este se realiza utilizando los métodos descritos anteriormente, ya que FileInputStream es el sucesor de InputStream.

Lectura de tipos de datos primitivos

El ejemplo anterior describió el trabajo convalores de bytes que pueden interpretarse como símbolos. Pero, ¿y si necesitamos leer un valor entero, fraccionario o lógico? Para hacer esto, en Java InputStream se expande indirectamente la clase DataInputStream. Esta clase es el contenedor de InputStream, que se le pasa cuando se crea como un argumento para el constructor. Este tipo de flujo lee los datos en forma binaria.

DataInputStream también implementa la interfaz DataInput y sus métodos para leer tipos de datos primitivos. A continuación hay una lista de estos métodos.

java io inputstream

Los nombres de los métodos hablan por sí solos: cada uno de ellos está destinado a leer un cierto tipo de datos.

Flujo de entrada almacenado

Se implementa la secuencia de lectura de datos almacenados en el búferla clase BufferedInputStream en Java. El inputStream está envuelto en esta clase. Esta clase complementa el flujo con un buffer, que le permite leer más de un byte a la vez. Esto permite mejorar significativamente el rendimiento de la operación. BufferedInputStream es un descendiente indirecto de InputStream y, en consecuencia, hereda todos los métodos anteriores.

Esta clase tiene dos constructores:

  • BufferedInputStream (flujo de entrada InputStream);
  • BufferedInputStream (flujo de entrada InputStream, tamaño del buffer int)

A partir de la firma de los constructores, puede comprender que el primero establece el tamaño del búfer por defecto, y en el segundo es posible configurarlo manualmente.

Conclusión

Cubrimos la implementación básica de InputStream. Si necesita convertir los bytes recibidos en una cadena, entonces en Java InputStream to String (), lamentablemente, no está sobrecargado, por lo que para esto tendrá que utilizar utilidades especiales, por ejemplo IOUtils de la biblioteca de Apache Commons.</ span </ p>