1

apache.commons.FtpClientを介してファイルを読み込んでいます。

これは99.9%の確率で正常に機能しますが、read()メソッドで停止することがあります...

InputStream inStream = ftp.retrieveFileStream(path + file.getName());
String fileAsString = "";

if(inStream == null){
    return;
}
while((c = inStream.read()) != -1){ //this is where the code sometimes just hangs               
   fileAsString += Character.valueOf((char)c);

}

私の質問は、このシステムの無期限のロックを防ぐための最も信頼できる方法は何ですか。別のスレッドでタイマーを設定する必要がありますか?それとも、それを行うためのより簡単な方法はありますか?

4

2 に答える 2

4

コードがハングする場合は、FTP サーバーがファイル全体を送信していないことを意味します。タイマーを使用できますが、FtpClient を使用するとタイムアウトを設定できると思います。

ところで:ファイルを読む方法は非常に非効率的です。ファイルが数 K より大きい場合、CPU の使用量が増加します。

バイト (それ自体は悪い考えです) から Character を作成し、ファイル内のすべてのバイトに対して String オブジェクトを作成しています。

提供されている copy メソッドまたは commons-io ライブラリに付属のメソッドを使用して、データを ByteArrayInputStream にコピーすることをお勧めします。

于 2009-02-28T07:22:12.970 に答える
1

もしそうなら、ドキュメントをざっと見るだけで...

while (inStream.available() > 0 && (c = inStream.read()) != -1)

実際に読む前に、ブロックせずに読めることを再確認するようです。私はこれについて確信が持てません。

于 2009-02-27T22:42:44.997 に答える