2016-09-17 9 views
0

closeInputStreamが無期限にハングアップする可能性があることを知る必要があります。ここに私のコードです。 InputStreamまたはBufferedReaderを閉じる終了時にJavaの入力ストリームがハングする

URL url = new URL("ftp://.."); 
InputSream is = url.openStream(); 
BufferedReader reader = new InputStreamReader(new GZIPInputStream(is)); 

try{ 
    while(true){ 
     if(reader.readline() == null){ 
      break; 
     } 
    } 
}catch(Exception e){ 
    e.printStackTrace(); 
} finally{ 
    System.out.println("Closing reader"); 
    is.close(); // sometimes hangs indefinitely 
    System.out.println("Reader closed"); 
} 

は同じ効果があります。

答えて

0

私はのInputStreamは、私はそれはあなたが使用している特定の入力ストリームの性質だと思う近い

に無期限にハングアップする可能性がありますかを知る必要があります。

FTPサーバーからファイルを読み込むためのストリームがあります。 Javaクライアント側で使用されているプロトコルドライバによっては、ファイルclose()がアクティブなFTPセッションを終了しようとしている可能性があります。これは、リモートサーバーとネットワークパケットを交換することを含む可能性があります。ネットワークに問題がある場合、またはサーバーが停止した場合、ネットワークタイムアウトが設定されている時間などによって「長い時間がかかる」...

また、このようなものが考えられます。あなたは、接続がclose()に掛けている間に、スレッドのスタックトレースをキャプチャして、把握するためのJavaコードベースを掘り下げすること

私の推薦どこにぶら下がっているのか。 (具体的な証拠なしでこれを調べるには問題が発生する可能性のある場所が多すぎます)

GZIPInputStreamをスタックから削除して、違いがあるかどうかを確認してください。

最終的に、より多くの証拠を持って私たちに戻ったら、使用している正確なJavaバージョンとFTPサーバーの実際のURLを教えてください。

関連する問題