Java BufferedInputStream (con ejemplos)

En este tutorial, aprenderemos sobre Java BufferedInputStream y sus métodos con la ayuda de ejemplos.

La BufferedInputStreamclase del java.iopaquete se usa con otros flujos de entrada para leer los datos (en bytes) de manera más eficiente.

Extiende la InputStreamclase abstracta.

Trabajo de BufferedInputStream

El BufferedInputStreammantiene una interna tampón de 8192 bytes .

Durante la operación de lectura en BufferedInputStream, se lee un fragmento de bytes del disco y se almacena en el búfer interno. Y desde el búfer interno, los bytes se leen individualmente.

Por lo tanto, se reduce el número de comunicaciones al disco. Es por eso que leer bytes es más rápido usando el BufferedInputStream.

Crear un BufferedInputStream

Para crear un BufferedInputStream, java.io.BufferedInputStreamprimero debemos importar el paquete. Una vez que importamos el paquete, aquí es cómo podemos crear el flujo de entrada.

 // Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file); 

En el ejemplo anterior, hemos creado un BufferdInputStreambúfer con FileInputStreamnombre con el archivo con nombre.

Aquí, el búfer interno tiene el tamaño predeterminado de 8192 bytes. Sin embargo, también podemos especificar el tamaño del búfer interno.

 // Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size); 

El búfer ayudará a leer bytes de los archivos más rápidamente.

Métodos de BufferedInputStream

La BufferedInputStreamclase proporciona implementaciones para diferentes métodos presentes en la InputStreamclase.

Método read ()

  • read() - lee un solo byte del flujo de entrada
  • read(byte() arr) - lee bytes de la secuencia y los almacena en la matriz especificada
  • read(byte() arr, int start, int length) - lee el número de bytes igual a la longitud del flujo y lo almacena en la matriz especificada comenzando desde el inicio de la posición

Supongamos que tenemos un archivo llamado input.txt con el siguiente contenido.

 This is a line of text inside the file. 

Intentemos leer el archivo usando BufferedInputStream.

 import java.io.BufferedInputStream; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); // Reads first byte from file int i = input .read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the file i = input.read(); ) input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Salida

 Esta es una línea de texto dentro del archivo. 

En el ejemplo anterior, hemos creado un flujo de entrada almacenado en búfer llamado búfer junto con FileInputStream. El flujo de entrada está vinculado con el archivo input.txt .

 FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file); 

Aquí, hemos utilizado el read()método para leer una matriz de bytes del búfer interno del lector en búfer.

disponible () Método

Para obtener el número de bytes disponibles en el flujo de entrada, podemos usar el available()método. Por ejemplo,

 import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + buffer.available()); // Reads bytes from the file buffer.read(); buffer.read(); buffer.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + buffer.available()); buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Salida

 Bytes disponibles al principio: 39 Bytes disponibles al final: 36 

En el ejemplo anterior,

  1. Primero usamos el available()método para verificar la cantidad de bytes disponibles en el flujo de entrada.
  2. Luego, hemos utilizado el read()método 3 veces para leer 3 bytes del flujo de entrada.
  3. Ahora, después de leer los bytes, nuevamente hemos verificado los bytes disponibles. Esta vez los bytes disponibles disminuyeron en 3.

Método skip ()

Para descartar y omitir el número especificado de bytes, podemos usar el skip()método. Por ejemplo,

 import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Skips the 5 bytes buffer.skip(5); System.out.println("Input stream after skipping 5 bytes:"); // Reads the first byte from input stream int i = buffer.read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the input stream i = buffer.read(); ) // Closes the input stream buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Salida

 Flujo de entrada después de omitir 5 bytes: es una línea de texto dentro del archivo. 

En el ejemplo anterior, hemos utilizado el skip()método para omitir 5 bytes del flujo de entrada del archivo. Por lo tanto, los bytes 'T', 'h', 'i', 's'y ' 'se omiten de la corriente de entrada.

Método close ()

Para cerrar el flujo de entrada almacenado en búfer, podemos usar el close()método. Una vez close()que se llama al método, no podemos usar el flujo de entrada para leer los datos.

Otros métodos de BufferedInputStream

Métodos Descripciones
mark() marcar la posición en el flujo de entrada hasta la cual se han leído los datos
reset() devuelve el control al punto en el flujo de entrada donde se estableció la marca

Para obtener más información, visite Java BufferdInputStream (documentación oficial de Java).

Articulos interesantes...