olá, estou tentando fazer um gerenciador de arquivos e download, queria saber como posso faço para quebrar o download do arquivo em varias conexoes, como um gerenciador de downloads faz! desde ja agradeço
URL e HTTPURLConnection
7 Respostas
Olha o que achei no google:
http://www.java-tips.org/java-se-tips/javax.swing/how-to-create-a-download-manager-in-java.html
Esse seu exemplo Renato, ele usa apenas uma conexao para fazer a transferencia do arquivo! Estou falando de ter varias conexoes e escrever no mesmo arquivo sem repetir os bytes copiados por outra conexão! Assim como o free download manager ou outro similar!
Entendi seu problema agora… desculpe.
Não é só fazer a mesma coisa que este código faz, em threads separadas?!
Não, dai se eu colocar varias threads paralelas com essa dai ele vai pegar e ler os bytes do arquivo que outras threads ja leram e escreveram, tornando assim ainda mais lento que se fosse uma conexao apenas, porque vai estar desperdiçando largura de banda!
Você leu o código?
Pelo que eu entendi, nesta parte do código você diz qual parte do arquivo você quer baixar:
// Specify what portion of file to download.
connection.setRequestProperty("Range",
"bytes=" + downloaded + "-");
Sendo assim, se for bem programado, nenhuma thread vai ler bytes que outra thread já leu…
Eu vi isso ai sim so que nao entendi esse metodo! se vc sabe como funciona, poderia me explicar? vlw!
Bom, pelo que li aqui:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35
e aqui:
http://msdn2.microsoft.com/en-us/library/aa287673(VS.71).aspx
O “Range” aí é um cabeçalho do protocolo HTTP 1.1 e serve pra dizer qual parte do conteúdo requisitado que você deseja receber.
Este recebe os primeiros 500 bytes do conteudo:
Range: bytes=0-499
Este recebe os ultimos 500:
Range: bytes=-500
Neste caso, suponhamos que você já tenha baixado 1500 bytes do conteúdo, e quer receber só o resto, faria assim:
Range: bytes=1500-
E é exatamente isso que aquele método está fazendo pra você.