/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problemer med BufferedInputStream og Threa~
Fra : Morten Sørensen


Dato : 30-06-01 12:01

Hej

Jeg arbejder i øjeblikket på at lave en download manager i Java og er i den
forbindelse stødt på flg. problem:

Jeg bruger en BufferedInputStream til at overføre filerne med, det går sådan
set også fint nok sålænge der kun kører en tråd, men når jeg sætter flere
tråde til at downloade så er det som om at BufferedInputStream's read metode
blokker fuldstændig efter der har været et "context switch".
Ideen med flere tråde er at åbne flere forbindelser til serveren på samme
tid, således at hver tråd downloader en bestemt del af filen, fragmenterne
kan således samles til sidst, når alle tråde er færdige..

Jeg håber der er nogen, som har en anelse om hvad der er galt. Det er den 4.
sidste linje, som fejler : pos = in.read(bytes, pos, size);

Jeg har vedhæftet flg. kode:

private void download() throws Exception
{
byte[] bytes = new byte[1024];
URL url = new URL(filFragment.getUrl());
URLConnection uCon = url.openConnection();


BufferedInputStream in = new BufferedInputStream(uCon.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(new
FileOutputStream(new
File(JDMConfig.getDownloadDir()+""+filFragment.getFilNavn())));

int pos = in.read(bytes, filFragment.getStartByte(), size);

float counter = 0;
while (pos != -1 && pos <= filFragment.getSlutByte())
{
if(counter > 0 && pos < size)
counter = counter + ((float)pos / size);
else
counter++;

out.write( bytes, 0, pos );
pos = in.read(bytes, pos, size);
}
out.close();
}

Ovenstående kode bliver kaldt fra klassens run metode og tråden startes
således:
....
DownloadManager dm = new DownloadManager(f);
dm.start();

På forhånd tak

--
Med venlig hilsen
Morten Sørensen



 
 
Morten Jensen (02-07-2001)
Kommentar
Fra : Morten Jensen


Dato : 02-07-01 14:00

Morten Sørensen wrote:

> Ideen med flere tråde er at åbne flere forbindelser til serveren på
> samme tid, således at hver tråd downloader en bestemt del af filen,
> fragmenterne kan således samles til sidst, når alle tråde er
> færdige..
>
> int pos = in.read(bytes, filFragment.getStartByte(), size);

Jeg tror, at du har misforstået read() metoden. Den anden parameter er
ikke hvilket byteindex i den fil du henter, som den skal starte med at
læse ved, men derimod hvilket byteindex i array'et (bytes), som den skal
starte med at skrive ved.

Hvis du kun vil hente en del af filen, så skal det specificeres allerede
i HTTP requestet (Læs om Range headeren i HTTP-rfc'en -
http://sunsite.dk/RFC/rfc/rfc2616.html). Bemærk, at ikke alle servere
understøtter denne header.

--
Morten Jensen


Morten Sørensen (02-07-2001)
Kommentar
Fra : Morten Sørensen


Dato : 02-07-01 14:07

Hej

Tak for hjælpen Morten

> Jeg tror, at du har misforstået read() metoden. Den anden parameter er
> ikke hvilket byteindex i den fil du henter, som den skal starte med at
> læse ved, men derimod hvilket byteindex i array'et (bytes), som den skal
> starte med at skrive ved.

Du har helt ret det er mig der har misforstået javadoc...

>
> Hvis du kun vil hente en del af filen, så skal det specificeres allerede
> i HTTP requestet (Læs om Range headeren i HTTP-rfc'en -
> http://sunsite.dk/RFC/rfc/rfc2616.html). Bemærk, at ikke alle servere
> understøtter denne header.
>
Det ser spændende ud det vil jeg kigge på, jeg siger foreløbig mange tak!

> --
> Morten Jensen
>

MVH
Morten Sørensen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste