2012-04-11 20 views

答えて

1

を呼び出すと、ディスクに保存されていないことを意味し、ストリーミングやバッファリングすることができます。リソースをストリームとしてダウンロードし、手動でダウンロードしたバイト数を把握する必要があります。それがHTTPの仕組みです。

2

AFAIKサーバーに最大応答サイズを伝えるHTTPヘッダーはありません。応答のContent-Lengthを確認し、応答が大きすぎる場合はすぐに戻ります。それが指定されていない場合(サーバー側では未知数であっても)、唯一のオプションはダウンロードを開始することです。心配しないでください:HttpClient.execute().getEntity()に電話すると、内容は完全にはどこでもダウンロードされません。HttpEntityは、それが完全にメモリに保持またはできるだけ早くあなたがContent-Length背中を取得しない場合、それはオプションである​​

You can explore the sources yourself

1

これはジャロッドの答えに従って、私は問題を解決することになった方法です:

HttpGet request = new HttpGet(); 
request.setURI(new URI(url)); 
response = client.execute(request); 
BufferedReader in; 

in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
StringBuffer sb = new StringBuffer(""); 
String line = ""; 

char buffer[] = new char[1024]; 

int totalReadSize = 0, currentRead=0; 
while ((currentRead = in.read(buffer,0,buffer.length)) != -1) 
{ 
    totalReadSize += currentRead; 
    line = new String(buffer); 
    sb.append(line); 
    if (totalReadSize > MAX_DOWNLOAD_SIZE) 
    { 
     client.getConnectionManager().shutdown(); 
     throw new Exception("File too large"); 
    } 
} 
+0

あなたは(私が推測するContent-Typeヘッダから取られた)にInputStreamReaderの文字セットを指定する必要があります – xtian

関連する問題