2016-05-03 4 views
3

次のコードを使用して、Webサイトの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

Ok。だから私は 'conn.getContentLength()'と 'conn.getContentLengthLong()'を使いました。しかし両者とも私から-1を返している。 – Xtr33mm

+1

@ Xtr33mmつまり、Webサーバーが 'Transfer-Encoding:chunked'を使ってあなたに何かを送信していることを意味します。この場合、ストリームのサイズを知ることはできません。サーバーが可変サイズのデータ​​を連続的に出力するスクリプトを実行している可能性があるためです。ストリーム全体を文字列に読み込んで使用するか、あらかじめ応答の長さを知ることができないようにする必要があります。 –

+0

ありがとうございます。実際には私は 'progressbar'を実装しようとしていました。インターネットの速度に応じてすべてのデータを取得するのに約半分かかってしまうことがあるからです。とにかく、すべてのデータが利用可能になるまでどれくらいの時間が残っているかを示す 'progressbar'を表示できます。少し曖昧に聞こえるが、私はちょっとこのネットワークプログラミングの新しさだ。 – Xtr33mm