我正在尝试编写一个线程来执行以下操作:
1. 从输入流中读取;
2. 一些其他的例行公事;
3.如果socket关闭,抛出异常。
蓝牙 Socket 和来自套接字的 inputStream 在此之前已经设置好了。代码如下:
public void run() {
byte[] buffer = new byte[1024];
int bytes;
while (true) {
try {
//if(mInputStream.available() > 0){ //-------- Line 1
bytes = mInputStream.read(buffer);
//} //-------- Line 2
//---------------------//
// some other routines //
//---------------------//
} catch (IOException e) {
connectionLost();
break;
}
}
}
问题是上面的代码会因为阻塞而挂在mInputStream.read()处。但是,如果我取消注释第 1 行和第 2 行,即使 BlueToothSocket 关闭, mInputStream.available()函数也不会抛出异常。是否有任何方法可以解除阻塞读取功能,或者在使用 available() 并关闭蓝牙套接字时抛出异常?欣赏它!