Java中带Raspberry pi 3的蓝牙:我的BufferedReader在接收大量数据时挂起

Java中带Raspberry pi 3的蓝牙:我的BufferedReader在接收大量数据时挂起,java,android,bluetooth,arm,Java,Android,Bluetooth,Arm,我在Raspberry Pi 3上用Java编写了一个简单的程序。它所做的基本上是在电视上播放动画和声音,它接收到的用于知道播放内容的输入由使用蓝牙的安卓平板电脑发送 在平板电脑方面,我有一些滑块(例如:音量),每当它们被更改时,都可以通过蓝牙发送数据。平板电脑充当服务器,代码如下所示: final BluetoothSocket clientSocket = bluetoothServerSocket.accept(); InputStream is = clientSocket.getInp

我在Raspberry Pi 3上用Java编写了一个简单的程序。它所做的基本上是在电视上播放动画和声音,它接收到的用于知道播放内容的输入由使用蓝牙的安卓平板电脑发送

在平板电脑方面,我有一些滑块(例如:音量),每当它们被更改时,都可以通过蓝牙发送数据。平板电脑充当服务器,代码如下所示:

final BluetoothSocket clientSocket = bluetoothServerSocket.accept();
InputStream is = clientSocket.getInputStream();
OutputStream os = clientSocket.getOutputStream();
bufIn = new BufferedReader( new InputStreamReader( is ) );
bufOut = new BufferedWriter( new OutputStreamWriter( os ) );
connection = (StreamConnection) Connector.open(serviceInDevice);
is = connection.openInputStream();
os = connection.openOutputStream();
bufIn = new BufferedReader(new InputStreamReader(is));
bufOut = new BufferedWriter(new OutputStreamWriter(os));
每当我想发送数据时,我都会在另一个线程中执行以下操作:

bufOut.write("<message>blabla</message>");
bufOut.flush();
while(true) {
    String readLine = bufIn.readLine();
    //Process data...
}
为了接收数据,我在另一个线程上执行以下操作:

bufOut.write("<message>blabla</message>");
bufOut.flush();
while(true) {
    String readLine = bufIn.readLine();
    //Process data...
}
在这里,经过一次滑块狂乱之后,当平板电脑挂起其
flush()
功能时,程序挂起在
readLine()
上。 我曾经尝试在
bufIn
出现卡滞时测试它的状态,使用另一个线程并执行
System.out.println(bufIn.ready())
,但该线程也挂起在这一行。 我还尝试通过调用
is.available()
异步测试inputStream的状态
is
,但返回值始终为0

我已尝试将
BufferedReaders
BufferedWriters
更改为直接操作
OutputStream
InputStream
,但问题仍然存在

在发送部分添加睡眠以避免过度发送不是一个选项,因为我还必须向RPi发送音频数据,基本上还有很多东西

RPi上的蓝牙是否存在已知问题,或者我是否遗漏了什么


谢谢

好的,我找到了我的RPi蓝牙冻结的原因。答案可能对其他人没有多大帮助,但我正在使用VNC在我的计算机上查看树莓的输出,当我停止使用VNC时,问题就消失了。因此,如果有人想知道,不建议在RPi上同时使用VNC和蓝牙:p

好的,我已经找到了我的RPi的蓝牙冻结的原因。答案可能对其他人没有多大帮助,但我正在使用VNC在我的计算机上查看树莓的输出,当我停止使用VNC时,问题就消失了。因此,如果有人想知道,不建议在RPi上同时使用VNC和蓝牙:p