Java BufferedInputStream (com exemplos)

Neste tutorial, aprenderemos sobre Java BufferedInputStream e seus métodos com a ajuda de exemplos.

A BufferedInputStreamclasse do java.iopacote é usada com outros fluxos de entrada para ler os dados (em bytes) com mais eficiência.

Ele estende a InputStreamclasse abstrata.

Trabalho de BufferedInputStream

O BufferedInputStreammantém um buffer interno de 8.192 bytes .

Durante a operação de leitura em BufferedInputStream, um bloco de bytes é lido do disco e armazenado no buffer interno. E a partir do buffer interno, os bytes são lidos individualmente.

Conseqüentemente, o número de comunicação com o disco é reduzido. É por isso que ler bytes é mais rápido usando o BufferedInputStream.

Crie um BufferedInputStream

Para criar um BufferedInputStream, devemos java.io.BufferedInputStreamprimeiro importar o pacote. Depois de importar o pacote, aqui está como podemos criar o fluxo de entrada.

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

No exemplo acima, criamos um BufferdInputStreambuffer nomeado com o FileInputStreamarquivo nomeado.

Aqui, o buffer interno tem o tamanho padrão de 8.192 bytes. No entanto, também podemos especificar o tamanho do buffer interno.

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

O buffer ajudará a ler bytes dos arquivos mais rapidamente.

Métodos de BufferedInputStream

A BufferedInputStreamclasse fornece implementações para diferentes métodos presentes na InputStreamclasse.

Método read ()

  • read() - lê um único byte do fluxo de entrada
  • read(byte() arr) - lê bytes do stream e armazena na matriz especificada
  • read(byte() arr, int start, int length) - lê o número de bytes igual ao comprimento do fluxo e armazena na matriz especificada a partir da posição inicial

Suponha que temos um arquivo denominado input.txt com o seguinte conteúdo.

 This is a line of text inside the file. 

Vamos tentar ler o arquivo 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(); ) ) ) 

Resultado

 Esta é uma linha de texto dentro do arquivo. 

No exemplo acima, criamos um fluxo de entrada em buffer chamado buffer junto com FileInputStream. O fluxo de entrada está vinculado ao arquivo input.txt .

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

Aqui, usamos o read()método para ler um array de bytes do buffer interno do leitor com buffer.

disponível () Método

Para obter o número de bytes disponíveis no fluxo de entrada, podemos usar o available()método. Por exemplo,

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

Resultado

 Bytes disponíveis no início: 39 Bytes disponíveis no final: 36 

No exemplo acima,

  1. Primeiro usamos o available()método para verificar o número de bytes disponíveis no fluxo de entrada.
  2. Em seguida, usamos o read()método 3 vezes para ler 3 bytes do fluxo de entrada.
  3. Agora, depois de ler os bytes, verificamos novamente os bytes disponíveis. Desta vez, os bytes disponíveis diminuíram em 3.

Método skip ()

Para descartar e pular o número especificado de bytes, podemos usar o skip()método. Por exemplo,

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

Resultado

 Fluxo de entrada após pular 5 bytes: é uma linha de texto dentro do arquivo. 

No exemplo acima, usamos o skip()método para pular 5 bytes do fluxo de entrada do arquivo. Portanto, os bytes 'T', 'h', 'i', 's'e ' 'são ignorados do fluxo de entrada.

Método close ()

Para fechar o fluxo de entrada em buffer, podemos usar o close()método. Depois que o close()método é chamado, não podemos usar o fluxo de entrada para ler os dados.

Outros métodos de BufferedInputStream

Métodos Descrições
mark() marcar a posição no fluxo de entrada até a qual os dados foram lidos
reset() retorna o controle para o ponto no fluxo de entrada onde a marca foi definida

Para saber mais, visite Java BufferdInputStream (documentação oficial do Java).

Artigos interessantes...