1

現在InputStream、アプリケーション(import java.io.InputStream)でを使用していますが、タイムアウトに関する問題が発生しました。動作しているようにInputStream見えるのは、一定量のビットを待ってから続行することです。私のアプリケーションでは、これは多くの場合機能しますが、タイムアウトが原因で読み取りが失敗することが予想される場合があります。誰かがこれを行う方法を知っていますか?

関数と一緒に実行してキャンセルするスレッドを作成する例をたくさん見つけましたread()が、それを使用できる既存のクラスがあるかどうか疑問に思いInputStreamました。

4

2 に答える 2

1

これは、どこから読んでいるかに大きく依存します。ファイル (またはローカル) ソケットからの場合、タイムアウトはありません。リモート ソケットからの場合は、ソケットの作成時にタイムアウトを指定できます。タイムアウトした場合は、例外が発生するはずです。スレッド/ を使用AsyncTaskする方法がありますが、Java NIO を使用していない限り、通常、ブロックされた読み取りを中断することはできません。

いいえ、それはばかげたことではありません。どのように「自分でタイムアウト」することを提案しますか? 誰かがタイムアウトを通知する必要があり、その誰かがある種のモニター スレッドであるか、OS がエラーを発生させているかのいずれかです。

于 2012-12-21T08:54:53.280 に答える
1

私はこれに使用AsyncTask<>します。UI をブロックするのではなく、非同期でストリームの読み取りを開始し、選択した時点でタスクをキャンセルすることができます。ドキュメントはこちら

于 2012-12-20T19:49:40.073 に答える