私はファイルをダウンロードしようとしているアプリを持っています。私はHTTPUrlConnection
をダウンロードに使用しています。当初、ダウンロード速度は遅かったです。Android/Java低速ネットワークIO
私は、バッファリングされた入力ストリームを使用し、バッファサイズを1024から8192に増やすことでパフォーマンスを改善しました。それを超えてバッファを増やしても、改善はありませんでした。ここで
は抜粋です。でも、この後
InputStream inputStream = (InputStream) new URL(requestURL)
.getContent();
BufferedInputStream bufferedInputStream = new BufferedInputStream(
inputStream);
OutputStream outputStream = new FileOutputStream(fileSaveUrl);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
outputStream);
int bytesToRead = 1024 * 256;
byte buffer[] = new byte[bytesToRead];
while ((count = bufferedInputStream.read(buffer)) != -1
&& !isCancelled()) {
requestStatus((int) (downloaded * 100/fileSize));
bufferedOutputStream.write(buffer, 0, count);
}
、2倍速くiPad上のAndroidと比較すると、同じファイルがダウンロードされます。
何か不足していますか?
編集
- あなたが/言及を尋ねる前にも、ダウンロードが別のスレッドで実行されています。 私は出力をバッファリングする必要はありません実現しないが、私は後でそれに周りを取得します:)
bytesToRead
について:私は別のバッファサイズで実験して、最後の実験は256キロバイト
ディスクへのデータの書き込みを無効にするとスピードアップが試行されましたか? – Robert
Androidにはヒープサイズが限られているため、Appsに提供するヒープサイズは制限されているため、SDカードに直接書き込むことができます。また、私はいくつかのテストを実行しました。ファイルセクションへの書き込みは、プログラム全体を遅くするものではありません。 –
"私はいくつかのテストを実行しましたが、ファイルセクションへの書き込みはプログラム全体を遅くしていません" - それはすべきです。通常、マルチスレッドプログラミングでは、最大限のパフォーマンスを目指している場合は、読んでいるスレッドとは別のスレッドで記述します。 – CommonsWare