2016-05-03 264 views
3

我使用下面的代碼從網站url打開輸入流。我想知道在打開流之前是否有任何方法可以找到html源代碼的大小。找出html頁面的大小

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

您可以向網站發送HTTP請求並獲取返回數據的大小 –

回答

1

試試這個:

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

現在length將包含請求資源的Content-Length以字節爲單位。請注意,這不適用於chunked傳輸,在這種情況下,您需要繼續閱讀,直到您到達流的末尾以確定其長度。

+1

好的。所以我使用'conn.getContentLength()'和'conn.getContentLengthLong()'。但他們兩人都從我身上返回-1。 – Xtr33mm

+1

@ Xtr33mm這意味着Web服務器正在使用'Transfer-Encoding:chunked'向您發送一些內容。如果是這樣的話,在全部讀取之前不可能知道流的大小,因爲服務器可能正在運行腳本,該腳本不斷輸出可變大小的數據。因此,您必須將整個流讀取到一個字符串中並使用該字符串,或者不必事先知道響應的長度。 –

+0

謝謝。其實我試圖實現一個'progressbar',因爲有時需要大約半分鐘的時間來獲取所有數據,這取決於互聯網的速度。所以,無論如何,我可以顯示一個'progressbar',顯示在所有數據可用之前還剩多少時間。這聽起來有點模糊,但我對這個網絡編程有點新鮮。 – Xtr33mm