我今天做了一个测试,结果很奇怪。我使用下面的代码测试一些网页。
long start = System.nanoTime();
URL url = new URL("http://wp.pl");
System.out.println("" + (System.nanoTime() - start) / 1000000);
start = System.nanoTime();
InputStream is = url.openStream();
System.out.println("" + (System.nanoTime() - start) / 1000000);
start = System.nanoTime();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
System.out.println("" + (System.nanoTime() - start) / 1000000);
start = System.nanoTime();
BufferedReader in = new BufferedReader(isr);
System.out.println("" + (System.nanoTime() - start) / 1000000);
//After this point reading whole site goes nice and fast
只有第二次不同(其余的是0周围)。以下是(url.openStream())的不同站点的时间:
地址|时间|代码行
yahoo.com/ 1000 943
bbc.com 230 1500
news.google.pl/ 138 384
free-ebooks.net 776 668
wp.pl 3066 2811
关键是时间不同,它的外观取决于网站代码的长度。我的问题: url.openStream()下载整个站点代码吗?它不应该只是打开流并等待用户阅读它?
答案 0 :(得分:1)
openStream
等待至少,直到服务器开始发送响应。否则它无法知道它是否可以实际返回InputStream
或者应该抛出异常。
在许多网络服务器上,实际发送的数据是最短的时间:当Web服务器决定发送哪些标头(从而开始发送响应)时,它已经知道完整的内容。