2012-04-22 60 views
1

我想查找不帶HTTP頭和數據傳輸率的HTML文件的大小。以下是我的代碼;如何查找HTML文件的大小和數據傳輸率

import java.net.*; 
import java.io.*; 

public class HttpCon 
{ 
    public static void main (String[] args) throws IOException 
    { 
    Socket s = null; 

    try 
    { 
     String host = "host1"; 
     String file = "file1"; 
     int port = 80; 

     s = new Socket(host, port); 

     OutputStream out = s.getOutputStream(); 
     PrintWriter outw = new PrintWriter(out, false); 
     outw.print("GET " + file + " HTTP/1.1\r\n"); 
     outw.print("Host: " + host + ":" + port + "\r\n"); 
     outw.print("Accept: text/plain, text/html, text/*\r\n"); 
     outw.print("\r\n"); 
     outw.flush();   

     InputStream in = s.getInputStream(); 
     InputStreamReader inr = new InputStreamReader(in); 
     BufferedReader br = new BufferedReader(inr); 
     String line; 

     while ((line = br.readLine()) != null) 
     { 
       System.out.println(line); 
     } 
     br.close();  

    } 

    } 
} 

但我沒有任何想法如何做到這一點。是否有我可以查看的源代碼或我可以應用的任何資源?

任何幫助將不勝感激,在此先感謝。

+0

你有大量的代碼粘貼,也說你不知道如何做到這一點。你能更具體地瞭解你不知道該怎麼做的這一部分嗎? – zmccord 2012-04-22 16:12:40

+0

@zmccord實際上有兩個問題。首先,我需要找到沒有使用此代碼下載的HTTP標頭的HTML文件的大小。是否有特定的功能或其他建議?第二個是,在計算大小後,我必須找到數據傳輸速率。 – user1349536 2012-04-22 16:23:28

回答

0

你所要求的應該不是什麼大問題。閱讀行,直到您閱讀空行 - 這是標題結束的地方。之後,繼續閱讀並計算您已閱讀的所有字符,這是您的文件大小。至於傳輸速率:

final long start = System.nanoTime(); 
long charsRead = 0; 
... do the transfer, counting chars ... 
System.out.println("Transfer rate: " + 
    (charsRead/(1e-6 * (System.nanoTime() - start)))); 

這裏唯一的問題將是您使用的是BufferedReader所以你算個字符,而不是字節。如果你需要字節,那麼你需要使用原始的InputStream,然後在找到標題結尾的地方會有點痛苦。你可以通過使用不是BufferedReader而是InputStreamReader來解決這個問題(可能),它不會預讀任何東西。當您找到標題的結尾時,切換到原始InputStream以閱讀響應正文。