2012-04-22 57 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以阅读响应正文。