0

Thread着信ストリームをリッスンするためにa を拡張する次の Bluetooth サーバー クラスがあります。

class SeverThread extends Thread{
    bytes[] inBuffer = new bytes[1024];
    int bytes; 
    while(true){ 
        try{
            bytes = inputStream.read(inBuffer);
        }catch(IOException e){
                    // handle exception 
        }
        System.out.println(new String(inBuffer));
    }
}

この実装の問題:

クライアントが最初に を送信するとき"Sanjeev"、出力は"Sanjeev"です。涼しい。その後、クライアントは を送信smkし、現在の出力は ですsmkjeev。最初の 3 文字 --sanが になっていることに注意してくださいsmk。クライアントが を送信するhellと、出力は になりhelleevます。クライアントが再度送信すると、受信した文字列の長さがバッファ内の使用済みスペースと同じであるため"Sanjeev"、出力はになります。"Sanjeev"

これは、上記のコードに基づく予想される動作です。しかし、これは意図しないバグです。Sanjeev出力をそれぞれ、 、smkおよびにしたいhello。問題は明らかです。メモリ内の同じバッファを使用して、着信するすべての単語を取得します。

これを修正する方法について何か提案はありますか? 可能なアプローチ:

  1. 内部のループごとにバッファをクリアまたはリフレッシュしますwhile(true)。これを行う方法がわかりません。
  2. の宣言をループinBuffer に移動します。whileしかし、これは継続的にメモリを割り当て、大きな無駄になります。

ありがとう。

4

1 に答える 1

1

これはどう ?

bytes = inputStream.read(inBuffer);
inBuffer[bytes] = '\0';
于 2013-01-30T17:18:54.790 に答える