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
。問題は明らかです。メモリ内の同じバッファを使用して、着信するすべての単語を取得します。
これを修正する方法について何か提案はありますか? 可能なアプローチ:
- 内部のループごとにバッファをクリアまたはリフレッシュします
while(true)
。これを行う方法がわかりません。 - の宣言をループ
inBuffer
内に移動します。while
しかし、これは継続的にメモリを割り当て、大きな無駄になります。
ありがとう。