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