java - 蓝牙服务器传入缓冲区处理

标签 java string sockets bluetooth buffer

我有以下蓝牙服务器类,它扩展了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" ,因为接收到的字符串长度与缓冲区内已使用的空间相同。

这是基于上述代码的预期行为。但这是一个无意的错误。我希望输出分别为 Sanjeevsmkhello 。问题显而易见。内存中的同一缓冲区用于获取所有传入的单词。

关于如何解决这个问题有什么建议吗?可能的方法:

  1. 清除或刷新 while(true) 内每个循环的缓冲区。我不知道该怎么做。
  2. inBuffer 的声明移至 while 循环内。但是这样会不断分配内存,浪费很大。

谢谢。

最佳答案

这个怎么样?

bytes = inputStream.read(inBuffer);
inBuffer[bytes] = '\0';

关于java - 蓝牙服务器传入缓冲区处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609211/

相关文章:

Node.js集群模块+unix套接字

python - 使用Python通过套接字(端口80)连接基本访问webdata(html)

java - 在 Java 8 中创建方法引用数组的简写方法?

java - 如何在java中搜索字符串及其后面的数字

java.lang.RuntimeException : Can't create handler inside thread that has not called Looper. 准备()

c++ - 在数组中搜索字符串

python - pandas 在某些特定条件下从数据帧(分组)中删除重复项

java - 检查 ArrayList 是否包含某个字符串,同时不区分大小写

python - 返回字符串的剥离空白的函数

c - 发送文件大小,然后发送文件本身