2012-04-14 9 views
1

先日屋台: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(); 
    } 
} 
+0

どのように停止しますか?それは例外をスローしますか?それはハングアップしますか?それはタイムアウトですか?非常に多くのバイトを読み込みますが、ファイル全体は読み込めませんか? –

+0

@マリン:データフローはゼロになるだけで、例外もタイムアウトもありません。ときどき3.2 MiB(または他の値)で〜1.4 MiBをロードした後で停止することがあります。 – Robert

+0

データフローが停止してからどれくらい待ったのですか?データフローが停止したときの往復レイテンシとは何ですか? pingを使用してレイテンシを判断できます。 –

答えて

1

あなたが直面している問題は、Java 7に起因します。詳細は、IPv6にIPv4よりも高い優先度を与えることです。

この問題は

あなたは、IPv4に戻ってそれを変更することができます(...スイッチ、ルータなどの使用、インターネット接続および/またはローカルネットワークコンポーネントに依存してもよい)すべてのJavaベースのソフトウェアに影響を与えますが、唯一の一部のコンピュータで発生しますJava 6でシステムプロパティーを設定して使用したため、java.net.preferIPv4Stack=true

このプロパティーの設定は、アプリケーションごとに異なります。 Eclipseの場合は、eclipse.iniに設定する必要があります。

Andoird SDKマネージャの場合は、ファイルtools\android.batを編集し、ファイル末尾付近のJavaコールにパラメータ-Djava.net.preferIPv4Stack=trueを追加する必要があります。

関連する問題