En este tutorial, aprenderemos sobre Java BufferedInputStream y sus métodos con la ayuda de ejemplos.
La BufferedInputStream
clase del java.io
paquete se usa con otros flujos de entrada para leer los datos (en bytes) de manera más eficiente.
Extiende la InputStream
clase abstracta.
Trabajo de BufferedInputStream
El BufferedInputStream
mantiene 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.BufferedInputStream
primero 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 BufferdInputStream
búfer con FileInputStream
nombre 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 BufferedInputStream
clase proporciona implementaciones para diferentes métodos presentes en la InputStream
clase.
Método read ()
read()
- lee un solo byte del flujo de entradaread(byte() arr)
- lee bytes de la secuencia y los almacena en la matriz especificadaread(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,
- Primero usamos el
available()
método para verificar la cantidad de bytes disponibles en el flujo de entrada. - Luego, hemos utilizado el
read()
método 3 veces para leer 3 bytes del flujo de entrada. - 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).