Java 通过蓝牙发送的数据在继续接收新数据时会出现多次

Java 通过蓝牙发送的数据在继续接收新数据时会出现多次,java,android,bluetooth,android-bluetooth,Java,Android,Bluetooth,Android Bluetooth,我正在尝试构建一个android客户端应用程序,该应用程序使用蓝牙将用户执行的手势数据发送到Java服务器。 当用户执行手势时,应用程序会向pc发送有关手势的数据。 例如,android客户端发送5:-24:2,java服务器接收5:-24:2。 只要手势在它们之间长距离执行,代码就可以正常工作 问题是当应用程序发送数据非常快,因为用户执行滚动,例如,所以onScroll。。。为每个事件调用。。。。 然后一条特定的消息被卡住: (android client send) 5:-24:2, (ja

我正在尝试构建一个android客户端应用程序,该应用程序使用蓝牙将用户执行的手势数据发送到Java服务器。 当用户执行手势时,应用程序会向pc发送有关手势的数据。 例如,android客户端发送5:-24:2,java服务器接收5:-24:2。 只要手势在它们之间长距离执行,代码就可以正常工作

问题是当应用程序发送数据非常快,因为用户执行滚动,例如,所以onScroll。。。为每个事件调用。。。。 然后一条特定的消息被卡住:

(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok)
(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok)
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck)
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck)
...
java服务器端读取代码:

private StreamConnection mConnection;
public void run() {
    try {
        InputStream inputStream = mConnection.openInputStream();
        System.out.println("waiting for input");
        byte[] buffer = new byte[BUFFER_SIZE];

        while (true) {
            inputStream.read(buffer);
            String command = new String(buffer).trim();
            System.out.println(command);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
android客户端写入端:

    private final OutputStream mmOutStream;
    String msg = "5:-24:2";
    byte[] msgByte = msg.getBytes();
    mmOutStream.write(msgByte); 

我犯的一个主要错误是在inputStream.readbuffer接收不同长度的数据时使用相同的缓冲区。 我做了以下改变,解决了许多问题

  int length;
  while (true) {
        length = inputStream.read(buffer);
        String command = new String(buffer, 0, length);
        System.out.println(command);
    }