我想找到没有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();
}
}
}
但我不知道该怎么做。是否有我可以查看的源代码或我可以应用的任何资源?
任何帮助将不胜感激,提前谢谢。
答案 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
以阅读响应正文。