2017-11-22 5 views
0
String thisurl ="http://songolum.com/file/ppdVkTxqhwcJu-CAzCgtNeICMi8mHZnKQBgnksb5o2Q/Ed%2BSheeran%2B-%2BPerfect.mp3?r=idz&dl=311&ref=ed-sheran-perfect"; 
url = null; 
try { 
    url = new URL(thisurl); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      try { 
       // urlConnection.setRequestProperty("Transfer-Encoding", "chunked"); 
       urlConnection.setRequestProperty("Accept-Encoding", "identity"); 
       urlConnection.setDoOutput(true); 
       urlConnection.setChunkedStreamingMode(0); 

int l=0; 
     InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
     while(in.read()!=-1) 
      { 
      l=l+in.read(); 
      } 
     System.out.println("Content-length" +l); 

で見つかったと私はそれが**コンテンツの長さは、私は他のソフトウェアでチェック**このURL

+0

あなたは 'in.read()'を2回呼びます。読み取られた量の1つのみを加算します。 whileループをリファクタリングする必要があります。ストリームの処理に関する例を検索してみてください – Doomsknight

+0

@Doomsknightあなたは私にアンドロイドで新しい例を表示できますか?ありがとう – user2037091

+1

do { ln = in.read(); if(ln!= - 1) l = l + ln; } while(ln!= - 1); – user2037091

答えて

0

この1人の希望をしてみてくださいその10メガバイトで、私は、ほぼ1メガバイト取得していますgzipで圧縮されたファイルだと見つかりませんそれはあなたのために役立つだろう。

HEAD要求を使用して、私は自分のウェブサーバに正しい内容長フィールドを返信させ、それ以外の場合は間違っていました。あなたが一緒に追加されたので、また

private int tryGetFileSize(URL url) { 
    HttpURLConnection conn = null; 
    try { 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("HEAD"); 
     conn.getInputStream(); 
     return conn.getContentLength(); 
    } catch (IOException e) { 
     return -1; 
    } finally { 
     conn.disconnect(); 
    } 
} 
+0

私はこの結果から何かを得なかった、 http://songolum.com/file/ppdVkTxqhwcJu-CAzCgtNeICMi8mHZnKQBgnksb5o2Q/Ed%2BSheeran%2B-%2BPerfect.mp3?r=idz&dl=311&ref=ed-sheran-perfect」 しかし、私は取得のみ1942011bytes – user2037091

+0

[OK]を私はここにしようとします – Dilip

+0

あなたの時間とそのgzip圧縮urlConnection.setRequestProperty( "Accept-Encoding"、 "identity")を試してみてください、そしてトランスファーエンコーディング→チャンクドアイデンティティgzipファイル何も起こっていない – user2037091

1

2回)あなたは(読み呼んでいたので、あなたは間違っているつもりだった、直接あなたの質問に答えるために、そして:これは一般的に動作するかどうかは分かりませんが、私の場合、それはありませんそれらを数える代わりに、読み込まれた各バイトの値。 InputStream.read()は1バイトを読み取り、その値を返します.EOFでは-1を返します。あなたはそれぞれのread()呼び出しが返されたバイト数をバッファにバイト数を読み、カウントする必要があります。

InputStream in = urlConnection.getInputStream(); 
    byte[] buffer = new byte[4096]; 
    int countBytesRead; 
    while((countBytesRead = in.read(buffer)) != -1) { 
     l += countBytesRead; 
    } 
    System.out.println("Content-length: " + l); 

しかし、私は、これはあなたが何をする必要があるか、実際にはないと思われます。上記のコードは、HTTPヘッダーとコンテンツを含むレスポンスのすべてのコンテンツのサイズを返します。おそらくあなたが探しているのは、ドキュメント(またはダウンロードするファイル)の長さです。その目的でHTTPヘッダーContent-lengthを使用することができます(HTTPヘッダーの取得方法についてはその他の質問を参照してください)。

また、コンテンツがgzip圧縮されている場合とされていない場合があります。それは、HTTP要求が受け入れると言うものに依存します。

+0

あなたが示唆したものは正しいですが、ここのコードは正しく反映されません。あなたはまだ彼らの読み込みバッファの間にランダムなバイト値を一緒に追加しています – Doomsknight

+0

@Doomsknightはい、それを指摘してくれてありがとう!私はそれを修正します。 – DodgyCodeException

+0

私によく見えます。 +1 – Doomsknight

関連する問題