Neste tutorial, aprenderemos sobre Java ByteArrayInputStream e seus métodos com a ajuda de exemplos.
A ByteArrayInputStream
classe do java.io
pacote pode ser usada para ler uma matriz de dados de entrada (em bytes).
Ele estende a InputStream
classe 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.ByteArrayInputStream
pacote 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 arr
array. 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 ByteArrayInputStream
classe fornece implementações para diferentes métodos presentes na InputStream
classe.
Método read ()
read()
- lê o único byte da matriz presente no fluxo de entradaread(byte() array)
- lê bytes do fluxo de entrada e armazena na matriz especificadaread(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,
- Usamos o
available()
método para verificar o número de bytes disponíveis no fluxo de entrada. - Em seguida, usamos o
read()
método 2 vezes para ler 2 bytes do fluxo de entrada. - 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 ByteArrayInputStream
aula. 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).