URL java Download muito lento [RESOLVIDO]

Boa noite, estou usando a URL para fazer downloads de arquivos, mas tá muito lento pra baixar o arquivo, tenho GVT 15 MB e a taxa de download tá dando ± 95 Kbps.
Chega a demorar uns 3 minutos pra baixar um arquivo de 13 MB, alguma idéia? segue código abaixo

[code]public static boolean download(String linkDownload, String pathLocal) {

    try {
        URL url = new URL(linkDownload);
        String nomeArquivo = url.getPath();
        InputStream is = url.openStream();
        FileOutputStream fos = new FileOutputStream(pathLocal + nomeArquivo);
        int contByte = 0;
        long tempoInicio = System.currentTimeMillis();
        while ((contByte = is.read()) != -1) {
            fos.write(contByte);
        }
        long tempoFim = System.currentTimeMillis();
        //calcula a taxa de download
        long tempoDownload = ((tempoFim - tempoInicio) / 1000);
        is.close();
        fos.close();
        File arquivoSalvo = new File(pathLocal + nomeArquivo);
        System.out.println("Tamanho do arquivo baixado: " + arquivoSalvo.length()/1024 + " Kb");
        System.out.println("Tempo de downlod: " + tempoDownload + " segundos");
        System.out.println("Taxa de download: " + (arquivoSalvo.length()/1024) / tempoDownload + " Kbps" ) ;
        return true;
    }catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}[/code]

Valeu.

            while ((contByte = is.read()) != -1) {  
                fos.write(contByte);  
            } 

Amigo, não leia 1 byte de cada vez. O correto é ler um buffer de pelo menos 8KB de cada vez. Como se faz isso?

http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read(byte[])

Não se esqueça de pegar o retorno do método “read” para ver quantos bytes foram efetivamente lidos (não se esqueça que pode ser que menos de 8 KB estejam disponíveis nessa hora).

Valeu pela dica alterei o while ficando:

byte buffer[] = new byte[8192]; long tempoInicio = System.currentTimeMillis(); while ((contByte = is.read(buffer)) >= 0) { fos.write(buffer, 0, contByte); }

Agora tá os bixoooooo, ta vindo a 1 Mbps o download. Testei com vários tamanhos, 128, 512, 1024, 2046, 4096, 8192, todos sempre com a mesma taxa de download de 1 Mbps. Isso não entendi muito bem como funciona. Queria que viesse a 1,6 Mbps. :slight_smile:

Depende de onde você está fazendo o download :slight_smile:

Use uma ferramenta como o SpeedTest.net para ver qual é a taxa que realmente as coisas estão vindo. Teoricamente, 15 MBPs deveria dar por volta de 1,6 MB/s (levando em conta todos os overheads). Entretanto, pode ser que haja alguma limitação em algum ponto.

Sim, eu sei que depende de onde estou fazendo o download, gostaria de entender mais sobre o tamanho do buffer a ser lido :-).
No speed test deu 15 MB de down e 1 MB de up. Usando o downltheamall do firefox consigo fazer downlad a 1,6 e 1,7 Mbps