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しかし、これは継続的にメモリを割り当て、大きな無駄になります。
ありがとう。