私はアンドロイドアプリでダウンロードしています。私はローカルネットワーク接続を使用しており、ダウンロードは本当に遅いです。Androidの遅いファイルのダウンロード
ここで私が使用しています彼コードは次のとおりです。
URL url = new URL(ep.getFileURL());
File destFile = new File(<path to sd card file>);
URLConnection uCon = url.openConnection();
InputStream is = uCon.getInputStream();
OutputStream os = new FileOutputStream(destFile);
int progress = 0;
int lastProgress = 0;
int totalSize = uCon.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[4096];
int count = -1;
while((count = is.read(buffer)) != -1)
{
os.write(buffer, 0, count);
downloadedSize = downloadedSize + count;
progress = (int)(downloadedSize * 100.0/totalSize);
if(progress - lastProgress >= 5) {
publishProgress(progress);
lastProgress = progress;
}
}
os.close();
が何か問題を見つけるのですか?ありがとうございました。
編集:
私はあなたの提案を使用して自分のコードをテストし、私はこれらの結果を得た:だから
# Download times tests # Without bufferedoutput Downloading file: 1 ms, Start download Downloading file: 179812 ms, Finished downloading 54687744 bytes Downloading file: end, 179813 ms With bufferedoutput Downloading file: 1 ms, Start download Downloading file: 178312 ms, Finished downloading 54687744 bytes Downloading file: end, 178313 ms With httpclient Downloading file: begin Downloading file: 1 ms, Start download Downloading file: 178241 ms, Finished downloading 54687744 bytes Downloading file: end, 178242 ms
を、バッファストリームを使用して、または直接のHttpClientを使用して、何も変更はありません...
私のコードはAsyncTaskの中にあるので、publishProgress()は実際には分離されたスレッドで実行されていると言わざるを得ないでしょう。
ご協力いただきありがとうございます。
私は答えにこれをあげますよ。 –
あなたはどんなスピードであなたはどんなスピードを期待していますか?あなたのIOのスピードに疑問を抱いているなら、最初にやるべきことは時間です。あなたの改善が大きな違いをもたらすかどうかを知ることができます。 –
publishProgress()で何をしていますか? (少しのコードが役に立ちます..) – ap400200