Java ByteArrayInputStream (com exemplos)

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

A ByteArrayInputStreamclasse do java.iopacote pode ser usada para ler uma matriz de dados de entrada (em bytes).

Ele estende a InputStreamclasse abstrata.

Nota : Em ByteArrayInputStream, o fluxo de entrada é criado usando a matriz de bytes. Inclui uma matriz interna para armazenar dados dessa matriz de bytes específica.

Crie um ByteArrayInputStream

Para criar um fluxo de entrada da matriz de bytes, devemos importar o java.io.ByteArrayInputStreampacote primeiro. Depois de importar o pacote, aqui está como podemos criar um fluxo de entrada.

 // Creates a ByteArrayInputStream that reads entire array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr); 

Aqui, criamos um fluxo de entrada que lê todos os dados do arrarray. No entanto, também podemos criar o fluxo de entrada que lê apenas alguns dados do array.

 // Creates a ByteArrayInputStream that reads a portion of array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr, int start, int length); 

Aqui, o fluxo de entrada lê o número de bytes igual ao comprimento do array começando na posição inicial.

Métodos de ByteArrayInputStream

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

Método read ()

  • read() - lê o único byte da matriz presente no fluxo de entrada
  • read(byte() array) - lê bytes do fluxo de entrada e armazena na matriz especificada
  • read(byte() array, 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

Exemplo: ByteArrayInputStream para ler dados

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String() args) ( // Creates an array of byte byte() array = (1, 2, 3, 4); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); System.out.print("The bytes read from the input stream: "); for(int i= 0; i < array.length; i++) ( // Reads the bytes int data = input.read(); System.out.print(data + ", "); ) input.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

Resultado

 Os bytes lidos do fluxo de entrada: 1, 2, 3, 4, 

No exemplo acima, criamos um fluxo de entrada de matriz de bytes chamado input.

 ByteArrayInputStream input = new ByteArrayInputStream(array); 

Aqui, o fluxo de entrada inclui todos os dados da matriz especificada. Para ler os dados do fluxo de entrada, usamos o read()método.

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.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Creates an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + input.available()); // Reads 2 bytes from the input stream input.read(); input.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + input.available()); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Resultado

 Bytes disponíveis no início: 4 bytes disponíveis no final: 2 

No exemplo acima,

  1. 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 2 vezes para ler 2 bytes do fluxo de entrada.
  3. Agora, depois de ler os 2 bytes, verificamos os bytes disponíveis. Desta vez, os bytes disponíveis diminuíram em 2.

Método skip ()

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

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Create an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Using the skip() method input.skip(2); System.out.print("Input stream after skipping 2 bytes: "); int data = input.read(); while (data != -1) ( System.out.print(data + ", "); data = input.read(); ) // close() method input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Resultado

 Fluxo de entrada após pular 2 bytes: 3, 4, 

No exemplo acima, usamos o método skip () para pular 2 bytes de dados do fluxo de entrada. Portanto, 1 e 2 não são lidos no fluxo de entrada.

Método close ()

Para fechar o fluxo de entrada, podemos usar o close()método.

No entanto, o close()método não tem efeito na ByteArrayInputStreamaula. Podemos usar os métodos desta classe mesmo após o close()método ser chamado.

Outros métodos de ByteArrayInputStream

Métodos Descrições
finalize() garante que o close()método seja chamado
mark() marca 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
markSupported() verifica se o fluxo de entrada suporta mark()ereset()

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

Artigos interessantes...