HTTP Download einer Datei mit "Statistiken"

A

AdamMyth

Gast
Hallo,

ich möchte eine Datei von einem HTTP-Server downloaden. Den nötigen Source-Code habe ich mir bereits zusammengebastelt. Siehe hier:
Java:
		URL url = new URL("http://downloads.sourceforge.net/project/virtualboximage/OpenSolaris/2008.05/opensolaris-2008.05-x86.7z?use_mirror=freefr");
		
		URLConnection uc = url.openConnection();
		uc.connect();
		
		long totalread = 0, contentLength = uc.getContentLength();
		FileOutputStream out = new FileOutputStream(new File("C:/out.dat"));
		InputStream in = uc.getInputStream();
		int BUF_SIZE = 1 << 8, bytesRead = -1;
		byte[] buffer = new byte[BUF_SIZE];
		
		System.out.println("Laenge: " + contentLength);
		
		long last = -1;
		long down = -1;
		
		while ((bytesRead = in.read(buffer)) > -1) {
			out.write(buffer, 0, bytesRead);
			totalread += bytesRead;
			
			
			if (last < 0 && down < 0) {
				last = System.currentTimeMillis();
				down += bytesRead;
			} else {
				long diff = System.currentTimeMillis() - last;
				if (diff >= 1000) {
					last = -1;
					
					System.out.println(down + " in " + diff);
					System.out.println((totalread/contentLength)*100 + "%");
					System.out.println(down/diff);
					System.out.println("----------");
					down = -1;
				}
			}
			
		}
		in.close();
		out.close();

Nun, das mit dem runterladen klappt bereits problemlos. Doch ich habe Probleme mit den Statistiken zu dem Download. Denn ich will später eine Aussage machen, wie "129 kb/s", doch irgendwie geht das nicht ....

Könnt Ihr mir sagen, was ich falsch mache und wie ich das richtig mache??? Bittte ...

Gruß,
Adam
 
S

SlaterB

Gast
ein Problem ist, dass du in Zeile 24 nur maximal eine Byte-Ladung addierst,
danach wird immer der else-Fall durchlaufen, bis 1000ms passiert gar nix und dann hast du immer ~255/1000 was in Java bei Ganzzahlrechnung immer 0 ergibt,
deshalb geht auch die Prozent-Anzeige nicht

hier ein schöneres Beispiel, gleich mit Dummy-Datenquelle:
Java:
public class Test
{
    public static void main(String[] args) throws Exception {
        final long contentLength = 200000;
        long totalread = 0;
        InputStream in = new InputStream()
            {
                int c = 0;
                
                @Override
                public int read() throws IOException {
                    c++;
                    if (c >= contentLength)
                    {
                        return -1;
                    }
                    if (Math.random() < 0.002)
                    {
                        try
                        {
                            Thread.sleep(20);
                        }
                        catch (InterruptedException e)
                        {
                            e.printStackTrace();
                        }
                    }
                    return 0;
                }
            };
        int BUF_SIZE = 1 << 8, bytesRead = -1;
        byte[] buffer = new byte[BUF_SIZE];

        System.out.println("Laenge: " + contentLength);

        long last = System.currentTimeMillis();
        long down = -1;

        while ((bytesRead = in.read(buffer)) > -1)
        {
            totalread += bytesRead;
            down += bytesRead;
            long diff = System.currentTimeMillis() - last;
            if (diff >= 1000)
            {
                System.out.println(down + " in " + diff + ", " + totalread);
                System.out.println((totalread * 100.0 / contentLength) + "%"); // DecimalFormat kann schön formatieren
                System.out.println(down / diff + " kb/s"); // wenn down < diff sein kann, dann besser auch * 1.0
                System.out.println("----------");
                down = -1;
                last = System.currentTimeMillis();
            }
        }
        in.close();
        System.out.println("end " + (System.currentTimeMillis() - last));
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Michael...

Top Contributor
was geht nicht?
Daraus
Code:
(totalread/contentLength)*100
würde ich
Code:
totalread*100/contentLength
machen, sonst hast Du immer 0%. Denn int/int = int

Dein down wird nie grösser als 256 (bytesRead) da Du es nur im ersten if Zweig erhöhst. Sollte es nicht unabhängig von der Bedingung erhöht werden und nur nach der Ausgabe wieder zurückgesetzt werden?

Und ungefähr jede Sekunde eine Ausgabe zu machen... Bin mir nicht sicher, ob das nicht die Aussage verfälscht, da die Ausgaben evtl. länger dauern als den Stream zu lesen und zu schreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
J Datei Download vom Server Netzwerkprogrammierung 8
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
T Download überprüfung... Netzwerkprogrammierung 9
S HTTP Download von Google-URL mit Parametern Netzwerkprogrammierung 1
S download PDF Netzwerkprogrammierung 2
V Datei Download Fenster Netzwerkprogrammierung 9
R Apache HttpClient File Download? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
T Download Programm - Download endet vorzeitig (bricht ab) Netzwerkprogrammierung 11
D HTTP Download - Skript im Weg Netzwerkprogrammierung 4
C Fehler bei PDF-Download Netzwerkprogrammierung 5
B FTP *.class download Netzwerkprogrammierung 2
eLogic Download eines Links Netzwerkprogrammierung 2
Dit_ FTP Download | "PassiveMode"-Socket öffnen Netzwerkprogrammierung 4
B HTTP Audio-Download per Direktlink Netzwerkprogrammierung 4
eLogic Download aus Internet Netzwerkprogrammierung 18
M Download von Webseite Netzwerkprogrammierung 4
A RMI Fortschritt bei Up/Download anzeigen Netzwerkprogrammierung 6
T Up- und Download mit https Netzwerkprogrammierung 14
B HTTP PDF Servlet download vom Server zum Client Netzwerkprogrammierung 3
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
Schandro Download von FTP Server mit maximal Geschwindigkeit Netzwerkprogrammierung 2
ModellbahnerTT Download progress Netzwerkprogrammierung 4
D FTP Download Netzwerkprogrammierung 5
N Video download Netzwerkprogrammierung 4
hdi Webseite auf Download-Links prüfen und Download starten? Netzwerkprogrammierung 7
C Download-Fortschritt wird falsch angezeigt. Netzwerkprogrammierung 2
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
B FTP - Verzeichnis Download Netzwerkprogrammierung 3
A Download-Client Netzwerkprogrammierung 6
A download programm Netzwerkprogrammierung 2
K http-download Netzwerkprogrammierung 12
2 Redirect, Login und Download bei Rapidshare.com Netzwerkprogrammierung 4
L file upload / download über http Netzwerkprogrammierung 5
M Download über URL Netzwerkprogrammierung 7
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
N Download HTTP .php-Seite mit Anmeldung Netzwerkprogrammierung 5
I rmi und download von klassen Netzwerkprogrammierung 12
M Download-Manager in System/Browser einbinden Netzwerkprogrammierung 11
G file download über https mit p12 Zertifikat Netzwerkprogrammierung 4
P Download funtioniert nicht richtig. Netzwerkprogrammierung 2
M FTP Verbindung und download von *.txt Netzwerkprogrammierung 6
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
N Link aus einer E-Mail aufrufen Netzwerkprogrammierung 2
N Name eines Attributes aus einem festen String und einer Variablen generieren Netzwerkprogrammierung 5
O HTTP Einloggen auf einer Homepage Netzwerkprogrammierung 8
H Daten auf einer Webseite eintragen Netzwerkprogrammierung 11
Z Debug-Info einer JavaSE Applikation auf Webserver Netzwerkprogrammierung 0
S HTTP Würdet Ihr Euch bei einer intern genutzten Anwendung auf Cookies verlassen? Netzwerkprogrammierung 2
J Hilfe beim programmiern einer App zur Anmeldung im Wlan-Netzwerk Netzwerkprogrammierung 0
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
D Überwachen einer SMB-Freigabe bei Änderungen im Dateisystem Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
O HTTP Zugriff und Aktionen auf einer Webseite ausführen Netzwerkprogrammierung 9
S Automatischer Login auf einer Webseite Netzwerkprogrammierung 12
D JavaMail: HTML Code einer Mail Netzwerkprogrammierung 9
H Daten an Textfeld einer Webseite schicken Netzwerkprogrammierung 2
D Aus einer URL die Dateien lesen Netzwerkprogrammierung 5
Dit_ RMI RMI-Server und gleichzeitiger Aufruf einer Methode Netzwerkprogrammierung 14
T Ladezeit einer Seite mit HttpURLConnection und Bildern Netzwerkprogrammierung 2
M bild von einer url erzeugen Netzwerkprogrammierung 7
V Quelltaxt einer Website auslesen funktioniert nicht Netzwerkprogrammierung 2
V Angezeigten Text einer Website erfragen Netzwerkprogrammierung 4
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
S Port auf einer bestimmten IP-Adresse auslesen? Netzwerkprogrammierung 6
S netzwerkprotokoll auf basis einer tcp verbindung erstellen Netzwerkprogrammierung 9
G Kryptische Zeichen beim Auslesen einer Website Netzwerkprogrammierung 11
B Frage zu einer Lösung (RMI) Netzwerkprogrammierung 2
H HTTP Einloggen auf einer HTML (php) Seite Netzwerkprogrammierung 6
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
F Entwicklung einer Software zur Steuerung und Überwachung von Netzwerkgeräten Netzwerkprogrammierung 4
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10
Pithecanthropus Konzeptionelle Ausarbeitung einer synchronen Kommunkation (Server/Client)) Netzwerkprogrammierung 6
A attachment einer Mail speichern Netzwerkprogrammierung 5
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
J programm zum autom. ausdruck einer webseite Netzwerkprogrammierung 2
E Parameter einer URLConnection Netzwerkprogrammierung 12
G Unvollständiges Laden einer Seite Netzwerkprogrammierung 2
M Rechner einer Domäne auslesen? Netzwerkprogrammierung 3
KNeuhaus (Windows) Authentication VON einer Java-App aus. Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
D Content einer email in sql-datenbank speichern Netzwerkprogrammierung 9
M RMI direkte Verbindung mit einer Mysql datenbank Netzwerkprogrammierung 13
T Quelltext einer Website auslesen Netzwerkprogrammierung 3
ven000m Frage aus einer mündl. Prüfung - wer kennt die Antwort? Netzwerkprogrammierung 6
J Funktion zum Maskieren der Sonderzeichen einer URL Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
C RMI: Problem beim Aufruf einer Methode. Falsch gecastet? Netzwerkprogrammierung 8
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
C IP adresse anhand einer domain adresse auslesen / ermitteln Netzwerkprogrammierung 3
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
V Zuweisen einer InetAddress mit einem byte Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben