Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

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

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étodoDescriçã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

  1. Técnicas de Cópia de Arrays em Java: Guia Completo
  2. Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
  3. Operador instanceof em Java: Guia Completo
  4. Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
  5. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  6. Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
  7. Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
  8. Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
  9. Dominando Java Scanner: Guia Completo com Exemplos Práticos
  10. Dominando Java Generics – Construindo Código Reutilizável e Type-Safe