1

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();       

    } 

  }
} 

しかし、私はこれをどのように行うのか分かりません。見ることができるソースコードや適用できるリソースはありますか?

よろしくお願いします。

4

1 に答える 1

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バイトではなく文字をカウントするために使用していることです。バイトが必要な場合は、rawを使用する必要があります。そうするとInputStream、ヘッダーがどこで終わるかを見つけるのが少し面倒になります。あなたは(おそらく)それを回避することができますがBufferedReaderInputStreamReaderそれは何も先読みしません。ヘッダーの終わりを見つけたら、rawに切り替えてInputStream応答本文を読み取ります。

于 2012-04-22T16:48:42.937 に答える