Icono play
Java
BufferInputStream

Inicialmente cuando queremos leer un archivo externo, empleamos la clase InputStream, que si bien no puede por sí sola leer un archivo de bytes, lo hace a través de su clase hija FileInputStream, que es específica para lectura de archivos tipo byte.

Algo característico de la subclase FileInputStream, es que accede al archivo de byte en byte, de a un caracter por vez, lo que consume más recursos de la PC si el archivo a acceder es muy grande.

Para subsanar este inconveniente de rendimiento en la PC con archivos muy “pesados”, Java nos proporciona otra clase hija de InputStreamBufferedInputStream.

Para utilizar esta clase debemos importar el paquete en la primera línea de código, de esta forma:

import java.io*.;

Para qué sirve la clase BufferedInputStream en Java

El objetivo principal de esta clase es hacer más eficiente la lectura de un flujo de datos proveniente de un medio externo, sea un archivo, una entrada de datos por teclado, etc.

Esta clase no accede byte a byte al contenido del medio externo, como en el caso anterior, sino que trata la información como a grupos de bytes y no a nivel caracteres, esto implica que lee una porción de bytes de un archivo y escribe esa porción sobre una zona de memoria, cuando esa zona se llena o queda vacía porque ya se ha accedido a la información, vuelven a realizarse las operaciones de entrada/salida.

BufferedInputStream, es una clase concreta, es decir que no es abstracta, y puede ser instanciada, en contraposición a la clase InputStream que no puede instanciarse.

Además, esta clase no trabaja con ficheros, su tarea es “envolver” un InputStream para el que se ha generado un objeto que recibe el contenido del archivo al cual accede la subclase FileInputStream.

Sintaxis de BufferedInputStream

InputStream fichero = new FileInputStream("miarchivo.txt");
BufferedInputStream ficheroBuffer = new BufferedInputStream(fichero);

Lo que hace BufferedInputStream es llamar al SO una vez y recolectar una porción de bytes en un buffer (una especie de “Array”), cuando el método .read() lo solicita ya no tiene que acceder al sistema operativo, sino que nos devuelve de a poco la información contenida en su buffer, por lo tanto, se reduce el número de comunicaciones con el disco.

¿Qué es un buffer?

El buffer es un archivo que sirve de transición entre el medio al que se accede y Java.

Java accede al buffer para cargar o descargar un archivo de a poco.

Los buffers funcionan como una alternativa a los procedimientos de entrada y salida.

Almacenan datos para ser accedidos con más eficacia. Son subclases de clases básicas.

Métodos de BufferedInputStream

  • .available() Devuelve un estimativo de bytes que se pueden leer desde el flujo de entrada.
  • .close() Cierra el archivo y libera memoria del sistema.
  • .read() Lee el contenido del archivo.
  • .mark() Marca la posición actual en el flujo de entrada
  • .markSupported() Comprueba que el método .mark() es soportado.
  • .reset() Reposiciona el flujo en la última posición que se marcó con .mark()

Código Ejemplo de BufferedInputStream

Nota:Al derivar de las clases InputStreamFileInputStream, lanza las mismas excepciones y por lo tanto debemos capturarlas con un bloque try-catch

import java.io.*;

public class bufferinputstream {

    public static void main(String[] args) {
        try { //captura del exception correspondiente a FileInputStream
            InputStream fichero =  new FileInputStream("miarchivo.txt");
            BufferedInputStream ficheroBuffer =  new BufferedInputStream(fichero);
            try { //captura de la exception de read
                int dato = ficheroBuffer.read();
                while (dato != -1) {
                    System.out.print((char) dato);
                    dato = ficheroBuffer.read();
                }
            } catch (IOException e) {
                System.out.println("No se puede leer el fichero " + e.getMessage());
            }
        }
        catch (FileNotFoundException e) {
            System.out.println("El programa da un error porque no encuentra el fichero: " + e.getMessage());
        }
    }
}
¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: