Download-Fortschritt wird falsch angezeigt.

Status
Nicht offen für weitere Antworten.

clausismus

Neues Mitglied
Hi,

hier erstmal bisschen Code:

Eine statische Funktion zum Herunterladen einer Datei.
theURL - Gibt die URL die Datei an die heruntergeladen werden soll.
outputPath - Gibt den Pfad an, wo die Datei gespeichert werden soll.
fullsize - Die größe der Datei, die man herunterladen will in bytes.
de - Eine Schnittstelle für Ereignisse-Aktionen beim herunterladen.
Code:
    public static boolean downloadFile(URL theURL, String outputPath, long fullsize, DownloadEvents de) throws Exception {
        URLConnection con;

        con = theURL.openConnection();
        con.connect();

        String type = con.getContentType();

        if (type != null) {
            byte[] buffer = new byte[4 * 1024]; // Größe eines IP-Paketes
            int read;

            FileOutputStream os = new FileOutputStream(outputPath);
            InputStream in = con.getInputStream();
            int i = 0;
            while ((read = in.read(buffer)) > 0) {
                if(de!=null) de.downloading(outputPath, theURL, (i * 4 * 1024), fullsize); // <--  Soll ein Fortschrittsbalken werden
                os.write(buffer, 0, read);
                i = i + 1;
            }

            os.close();
            in.close();

            return true;
        }
        else {
            return false;
        }
    }

Schnittstelle die für Ereignisse beim Herunterladen gedacht ist.
Code:
public interface DownloadEvents  {
    public void downloading(String filename, URL url, long size, long fullsize);
    public void downloadSuccessful();
    public void downloadFailed(Exception e);
}

Ein Objekt das den DownloadEvents-Schnittstelle besitzt.
Dies nutze ich zur Ausgabe des Fortschritts eines Download (Prozentanzeige)
Code:
    public void downloading(String filename, URL url, long size, long fullsize) {
        float downloadInPercent = (size * 100) / (float)fullsize;
        System.out.println("   Downloading: " + size + " - " + fullsize + " - " + downloadInPercent + " %");
    }


Wenn ich die statische Funktion "downloadFile(URL theURL, String outputPath, long fullsize, DownloadEvents de)" ausführe lädt die Funktion die Datei herunter, wobei jedes heruntergeladenes Paket gezählt wird.
Ich weiß wieviele Bytes ich schon heruntergeladen hab, durch das Zählen der Pakete, und die Information, das ein IP-Paket 4 Kilobyte groß sind.
Ich kenne schon die größe der Datei die ich herunterladen will, und wollte daher ein Fortschrittsanzeige für den Download machen.
Wenn ich jetzt aber eine Datei, die ca. 5 Megabyte groß ist herunterlade, lädt er ca. das 2,5 Fache an Bytes herunter, sprich ca. 14 Megabyte, und verfälscht die Fortschrittsanzeige.
Mir ist eingefallen, das ein IP-Paket z.B. die IP-Adresse des Senders und Empfängers beinhaltet, daher kann ja die Information die in dem IP-Paket steckt nicht 4 Kilo groß sein.
Ich habe bemerkt beim mehrmaligen Testen der Funktion, das die Funktion immer unterschiedlich viele IP-Pakete herunterlädt, obwohl es die gleiche Datei auf dem Server ist.
Ich habe auch ein Checksumme, von der Datei, die ich hochgeladen hab, gemacht.
Hab die Datei wieder mit der Funktion heruntergeladen und von der auch eine Checksumme gemacht.
Beide Dateien sind identisch.

1. Wie kann es sein, dass die Funktion immer unterschiedlich viel IP-Pakete herunterlädt?
2. Wie löse ich das Problem mit der Forschrittsanzeige?
 

clausismus

Neues Mitglied
Ich hab das Problem gelöst.

Hier die Lösung:

Code:
    public static boolean downloadFile(URL theURL, String outputPath, long fullsize, DownloadEvents de) throws Exception {
        URLConnection con;

        con = theURL.openConnection();
        con.connect();

        String type = con.getContentType();

        if (type != null) {
            byte[] buffer = new byte[4 * 1024];
            int read;

            FileOutputStream os = new FileOutputStream(outputPath);
            InputStream in = con.getInputStream();
            long downloadedBytes = 0;
            while ((read = in.read(buffer)) > 0) {
                downloadedBytes = downloadedBytes + read;
                if(de!=null) de.downloading(outputPath, theURL ,downloadedBytes, fullsize);
                os.write(buffer, 0, read);
            }

            os.close();
            in.close();

            return true;
        }
        else {
            return false;
        }
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A RMI Fortschritt bei Up/Download anzeigen Netzwerkprogrammierung 6
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
T Up- und Download mit https Netzwerkprogrammierung 14
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B HTTP PDF Servlet download vom Server zum Client Netzwerkprogrammierung 3
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
Schandro Download von FTP Server mit maximal Geschwindigkeit Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
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
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
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
OnDemand JMS Messages wird gecached Netzwerkprogrammierung 2
P RMI stub wird nicht gefunden Netzwerkprogrammierung 8
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
F Website parsen, die mit javascript zusammengebaut wird Netzwerkprogrammierung 1
P Socket Server übertragung wird immer langsamer Netzwerkprogrammierung 4
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
L Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert Netzwerkprogrammierung 6
M JSP wird im gesamten Projekt nicht neugeladen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
S anderer Rechner wird nicht gefunden Netzwerkprogrammierung 20
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Änderung des Objekts wird nicht serialisiert Netzwerkprogrammierung 9
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
F getSource Methode wird als Bot erkannt Netzwerkprogrammierung 8
Dit_ RMI setSoTimeout wird ignoriert? Netzwerkprogrammierung 3
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
J method = PUT, aber ausgeführt wird doGet...? Netzwerkprogrammierung 4
K Was wird genau per Telnet verschickt ? Netzwerkprogrammierung 5
M Dateidownload per FTP wird immer langsamer und bleibt dann stehen Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
C RMI Klasse wird unter falschem Pfad gesucht Netzwerkprogrammierung 4
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
M URL Handler wird nicht gefunden Netzwerkprogrammierung 6
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
A Quellcode von Homepage wird nicht komplett eingelesen Netzwerkprogrammierung 5
V RMI: code wird einfach übergangen ? Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
L RMI-Funktion wird lokal ausgeführt Netzwerkprogrammierung 12
A RMI: Wo wird die Methode ausgeführt? Netzwerkprogrammierung 9
P JNDI LDAP-SSL Verbindung, Zertifikat wird nicht angezeigt ? Netzwerkprogrammierung 2
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
T finlalize Methode vom Server wird nicht aufgerufen Netzwerkprogrammierung 4
B Socket wird nicht richtig geschlossen Netzwerkprogrammierung 2
K mapSystemException wird geworfen Netzwerkprogrammierung 2
L Attachment wird nicht angezeigt in der Email Netzwerkprogrammierung 3
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
R Socket wird nicht ausgeführt Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben