我有以下蓝牙服务器类,它扩展了 aThread
以侦听传入流:
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
但是这样会不断的分配内存,浪费很大。
谢谢。