2016-05-03 6 views
3

Ich verwende den folgenden Code, um einen Eingabestream von einer Website-URL zu öffnen. Ich wollte wissen, ob es eine Möglichkeit gibt, die Größe der HTML-Quelle herauszufinden, bevor ich den Stream öffne.Ermitteln der Größe der HTML-Seite

try 
{ 
    URL u = new URL(url); 
    InputStreamReader isr = new InputStreamReader(u.openStream()); 
    BufferedReader reader = new BufferedReader(isr); 
    String str; 
    while ((str = reader.readLine()) != null) { 
     webContent += str; 
    } 
    reader.close(); 
} 
catch (IOException e) 
{ 
    Console.print(e.getMessage()); 
} 
+0

Sie könnten eine HTTP-Anfrage an die Site senden und die Größe der zurückgegebenen Daten erhalten –

Antwort

1

Try this:

URL u = new URL(url); 
URLConnection conn = u.openConnection(); 
int length = conn.getContentLength(); 
InputStreamReader isr = new InputStreamReader(conn.getInputStream()); 
// ... 

Jetzt length die Content-Length der angeforderten Ressource in Bytes enthalten. Beachten Sie, dass dies für chunked Übertragungen nicht funktioniert, in diesem Fall müssen Sie lesen, bis Sie das Ende des Streams erreichen, um seine Länge zu bestimmen.

+1

Ok. Also habe ich 'conn.getContentLength()' und 'conn.getContentLengthLong()' benutzt. Aber beide kommen -1 von mir zurück. – Xtr33mm

+1

@ Xtr33mm Das bedeutet, dass der Webserver Ihnen etwas mit 'Transfer-Encoding: chunked' schickt. Wenn dies der Fall ist, ist es nicht möglich, die Größe des Streams vor dem Lesen zu kennen, da der Server möglicherweise ein Skript ausführt, das kontinuierlich Daten variabler Größe ausgibt. Sie müssen also entweder den gesamten Stream in eine Zeichenkette einlesen und diese verwenden, oder Sie müssen die Länge der Antwort vorher nicht kennen. –

+0

Danke. Eigentlich habe ich versucht, eine "Fortschrittsleiste" zu implementieren, weil es manchmal ungefähr eine halbe Minute dauert, bis alle Daten abhängig von der Geschwindigkeit des Internets abgerufen werden. So, wie auch immer, ich kann eine "Fortschrittsleiste" anzeigen, die anzeigt, wie viel Zeit noch übrig ist, bis alle Daten verfügbar sind. Es klingt ein bisschen vage, aber ich bin ein bisschen neu in dieser Netzwerkprogrammierung. – Xtr33mm