如何查找HTML文件的大小和数据传输速率

时间:2012-04-22 16:09:35

标签: java httpclient

我想找到没有HTTP标头和数据传输速率的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();       

    } 

  }
} 

但我不知道该怎么做。是否有我可以查看的源代码或我可以应用的任何资源?

任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 0 :(得分: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以阅读响应正文。