0

我有以下蓝牙服务器类,它扩展了 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分别为smkhello。问题很明显。内存中的同一个缓冲区被用来接收所有传入的单词。

对于如何解决这个问题,有任何的建议吗?可能的方法:

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

谢谢。

4

1 回答 1

1

这个怎么样 ?

bytes = inputStream.read(inBuffer);
inBuffer[bytes] = '\0';
于 2013-01-30T17:18:54.790 回答