Copiando conteúdo de um InputStream para um array de byte

1 resposta
rafael.espiritosanto

Olá a todos!

Uma dúvida básica.
Estou usando uma conexão http pra pegar um arquivo .csv

Estou pegando o arquivo do seguinte jeito:

URL url = new URL("http://www5.bcb.gov.br/Download/" + nomeArquivo);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
InputStream is = httpURLConnection.getInputStream();
byte[] bytes = new byte[10240000];
is.read(bytes);

Deste jeito somente parte do arquivo é lido para o array de bytes, jpa que o método read lê
somente parte do conteúdo. Não posso usar o DataInputStream para ler o conteúdo de uma
só vez pois da classCastException.

Como ler todo o conteúdo do inputStream para o array de bytes?
e como saber o tamanho certo do array de bytes?

Obrigado!

1 Resposta

rafael.espiritosanto

Consegui resolver....

int tamanho = httpURLConnection.getContentLength();
byte[] bytes = new byte[tamanho];
InputStream is = httpURLConnection.getInputStream();
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
    offset += numRead;
}
	    
 // Ensure all the bytes have been read in
if (offset < bytes.length) {
    throw new IOException("Could not completely read file " + nomeArquivo);
}
Criado 13 de fevereiro de 2008
Ultima resposta 13 de fev. de 2008
Respostas 1
Participantes 1