Java ByteArrayInputStream: Guia Prático para Leitura de Arrays de Bytes
Java ByteArrayInputStream
Este artigo explica como usar o ByteArrayInputStream do Java para ler dados de arrays de bytes, cobrindo construtores, métodos principais e exemplos práticos.
O que é ByteArrayInputStream?
A classe ByteArrayInputStream, parte do pacote java.io, implementa InputStream e permite tratar um array de bytes como um input stream. Internamente, armazena uma cópia do array fornecido, permitindo acesso aleatório e leitura eficiente.
Nota: O stream lê do próprio array, não de uma fonte externa, então todas as operações são baseadas em memória.
Criar um ByteArrayInputStream
Importe java.io.ByteArrayInputStream e instancie-o. Você pode ler o array inteiro ou uma fatia.
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);
O segundo construtor lê length bytes começando no índice start.
Métodos Principais
read()
int read()– lê o próximo byte, ou-1se o fim for atingido.int read(byte[] b)– preenche o array fornecido com dados.int read(byte[] b, int off, int len)– lê atélenbytes embcomeçando no offsetoff.
Exemplo: Lendo Bytes
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
System.out.print("Bytes lidos: ");
int valor;
while ((valor = input.read()) != -1) {
System.out.print(valor + ", ");
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Saída
Bytes lidos: 1, 2, 3, 4,
available()
Retorna o número de bytes ainda disponíveis sem bloqueio.
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
System.out.println("Inicialmente: " + input.available());
input.read();
input.read();
System.out.println("Após 2 leituras: " + input.available());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Saída
Inicialmente: 4 Após 2 leituras: 2
skip()
Avança a posição do stream pelo número solicitado de bytes.
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] array = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
input.skip(2);
System.out.print("Após skip: ");
int valor;
while ((valor = input.read()) != -1) {
System.out.print(valor + ", ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Saída
Após skip: 3, 4,
close()
Fechar um ByteArrayInputStream é uma operação sem efeito; o stream ainda pode ser usado depois. O método está presente apenas para compatibilidade de API.
Outros Métodos Úteis
| Método | Descrição |
|---|---|
mark(int readlimit) | Marca a posição atual. |
reset() | Retorna à última posição marcada. |
markSupported() | Sempre retorna true. |
finalize() | Garante liberação de recursos (sem efeito para esta classe). |
Para a API completa, veja a documentação oficial do Java.
Java
- Técnicas de Cópia de Arrays em Java: Guia Completo
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Scanner: Guia Completo com Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe