2016-05-03 265 views
3

我使用下面的代码从网站url打开输入流。我想知道在打开流之前是否有任何方法可以找到html源代码的大小。找出html页面的大小

try 
{ 
    URL u = new URL(url); 
    InputStreamReader isr = new InputStreamReader(u.openStream()); 
    BufferedReader reader = new BufferedReader(isr); 
    String str; 
    while ((str = reader.readLine()) != null) { 
     webContent += str; 
    } 
    reader.close(); 
} 
catch (IOException e) 
{ 
    Console.print(e.getMessage()); 
} 
+0

您可以向网站发送HTTP请求并获取返回数据的大小 –

回答

1

试试这个:

URL u = new URL(url); 
URLConnection conn = u.openConnection(); 
int length = conn.getContentLength(); 
InputStreamReader isr = new InputStreamReader(conn.getInputStream()); 
// ... 

现在length将包含请求资源的Content-Length以字节为单位。请注意,这不适用于chunked传输,在这种情况下,您需要继续阅读,直到您到达流的末尾以确定其长度。

+1

好的。所以我使用'conn.getContentLength()'和'conn.getContentLengthLong()'。但他们两人都从我身上返回-1。 – Xtr33mm

+1

@ Xtr33mm这意味着Web服务器正在使用'Transfer-Encoding:chunked'向您发送一些内容。如果是这样的话,在全部读取之前不可能知道流的大小,因为服务器可能正在运行脚本,该脚本不断输出可变大小的数据。因此,您必须将整个流读取到一个字符串中并使用该字符串,或者不必事先知道响应的长度。 –

+0

谢谢。其实我试图实现一个'progressbar',因为有时需要大约半分钟的时间来获取所有数据,这取决于互联网的速度。所以,无论如何,我可以显示一个'progressbar',显示在所有数据可用之前还剩多少时间。这听起来有点模糊,但我对这个网络编程有点新鲜。 – Xtr33mm