Avatar ·

Como converter InputStream em um array byte[] em Java? Todas as formas

Olá a todos! Sou novo em Java e me deparei com o seguinte problema: preciso ler todos os dados de um InputStream (por exemplo, de um arquivo ou de uma resposta HTTP) e obtê-los na forma de um array byte[]. Mas não sei como fazer isso corretamente.

\n\n

Aqui está o que tentei:

\n\n
InputStream input = new FileInputStream("data.bin");\nbyte[] data = ??? // Como obter o array de bytes?\n
\n\n

O problema é que o InputStream não me permite saber o tamanho dos dados antecipadamente. O método available() retorna não o tamanho completo, mas apenas o que já está disponível para leitura sem bloqueio. Tentei ler em um loop, mas o código fica confuso e frequentemente quebra.

\n\n

Li sobre ByteArrayOutputStream, mas não entendo como usá-lo corretamente. Também ouvi falar sobre readAllBytes(), mas