1

私は次のものを行うスレッドを書き込もうとしています:

1. 入力ストリームから読み取ります。

2. その他のルーチン

3. ソケットが閉じている場合は、例外をスローします。

BlueTooth Socket とソケットからの inputStream は、この前にセットアップされています。コードは次のとおりです。

public void run() {
    byte[] buffer = new byte[1024];
    int bytes;

    while (true) {
        try {
            //if(mInputStream.available() > 0){        //-------- Line 1
            bytes = mInputStream.read(buffer);
            //}                                      //-------- Line 2

            //---------------------//
            // some other routines //
            //---------------------//

        } catch (IOException e) {
            connectionLost();
            break;
        }               
    }
}

問題は、ブロッキングのために上記のコードがmInputStream.read()でハングすることです。しかし、1行目と2行目のコメントを外すと、mInputStream.available()関数はBlueToothSocketを閉じても例外をスローしません。読み取り機能のブロックを解除する方法、または available() が使用されて BlueTooth Socket が閉じられているときに例外をスローする方法はありますか? 感謝します!

4

2 に答える 2

0

ブロックされていない read() と available() をスローする簡単な方法がないようです。これを解決する最も便利な方法は、他のルーチンを実行する別のスレッドを作成することです。特に入力ストリームの読み取りと入力ストリームのステータスの確認 (例外がスローされた) のために、このスレッドをそのままにしておきます。

于 2013-05-06T09:50:05.717 に答える