我有以下蓝牙服务器类,它扩展了Thread
来监听传入流:
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
循环内。但是这样会不断分配内存,浪费很大。
谢谢。
最佳答案
这个怎么样?
bytes = inputStream.read(inBuffer);
inBuffer[bytes] = '\0';
关于java - 蓝牙服务器传入缓冲区处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609211/