先日屋台:Javaは:ダウンロードはいつも私が私に頭痛を与える深刻な問題に遭遇
すべてのJavaベースのツール(Eclipseの、Mavenの、AndroidのSDKローダー...)問題特定のファイルのダウンロードがあります。ダウンロードは無作為に停止します。
私は既にSuperuserに私の問題を記述しましたが、誰も私の問題を手伝うことができませんでした。したがって、いくつかのテストを自分自身で実行し始め、この質問の最後にサンプルコードが完成しました。
興味深いのは、バッファサイズが問題に及ぼす影響が小さいことです。バッファサイズを1024に減らすと、ほとんどの場合ダウンロードが完了します。
このコードはWindowsシステムでのみ問題になりますか?
私はJavaでダウンロードプログラムを開発したくないため、サンプルコードを修正しても問題は解決しません。コードは問題を示すためのものです。
public static void main(String[] args) {
try {
URL url = new URL("http://mirror.netcologne.de/maven2/com/google/android/android/2.3.3/android-2.3.3.jar");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
byte[] buffer = new byte[10485760]; // 10MiB
long read = 0;
while (true) {
int bytes = in.read(buffer, 0, buffer.length);
if (bytes < 0)
break;
read += bytes;
System.out.println("Bytes read: " + read);
}
conn.disconnect();
System.out.println("Finished");
} catch (Exception e) {
e.printStackTrace();
}
}
どのように停止しますか?それは例外をスローしますか?それはハングアップしますか?それはタイムアウトですか?非常に多くのバイトを読み込みますが、ファイル全体は読み込めませんか? –
@マリン:データフローはゼロになるだけで、例外もタイムアウトもありません。ときどき3.2 MiB(または他の値)で〜1.4 MiBをロードした後で停止することがあります。 – Robert
データフローが停止してからどれくらい待ったのですか?データフローが停止したときの往復レイテンシとは何ですか? pingを使用してレイテンシを判断できます。 –