29. januar 2003 - 12:16Der er
10 kommentarer og 1 løsning
Hvor mange kb downloadet?
Jeg har denne downloadfunktion der volder mig lidt problemer:public void run() { try { DownFrame frame= new DownFrame(this); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2); frame.show(); frame.updateBar.setMaximum(fileSize); final int MAX = fileSize; InputStream in = new URL(fileToDownload).openConnection().getInputStream(); FileOutputStream out = new FileOutputStream(new File(fileToSave)); int count; byte buf[] = new byte[MAX]; int bytesDownloadet=0; while ((count = in.read(buf,0,MAX)) != -1) { out.write(buf,0,count); bytesDownloadet++; frame.updateBar.setValue(bytesDownloadet); frame.downStat.setText("Downloading "+bytesDownloadet+"kb of "+fileSize+"kb"); } out.close(); in.close(); frame.okButton.setEnabled(true); } catch(Exception e) { System.out.println(e); } }
Problemet ligger i min "bytesDownloadet".. Den tæller op hvor mange kb der er downloadet indtil videre men rammer ved siden af hver gang. eksempel: hvis jeg downloader en fil på 4000kb så tæller den kun op til 2911
hvis jeg downloader en fil på 3000kb så tæller den kun op til 2212
Den rammer ca. 25% ved siden af hver gang...Hvad kan dette skyldes??
Når du forsøger at læse data via read(byte[] b, int off, int len) så er der ikke nogen garanti for at der læses det antal byte som angivet ved len. Prøv med noget lignende:
while ((count = in.read(buf,0,MAX)) != -1) { out.write(buf,0,count); bytesDownloadet+= count; frame.updateBar.setValue(bytesDownloadet/1024); frame.downStat.setText("Downloading "+(bytesDownloadet/1024)+"kb of "+fileSize+"kb"); }
evt skal bytesdownloadet være en anden datatype afhængig af hvor store filer du vil kunne hente.
Og check resultatet af getContentLength. API DOC siger:
#public int getContentLength() #Returns the value of the content-length header field. # #Returns: #the content length of the resource that this connection's URL references, #or -1 if the content length is not known.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.