我正在尝试编写一个线程来执行以下操作:
1.从输入流中读取;
2.一些其他的例程;
3.如果套接字已关闭,则抛出异常。
BlueTooth 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() 并关闭蓝牙套接字时抛出异常?欣赏它!
最佳答案
这是我用的:
private boolean receivedInTimelyManner(InputStream mInStream,
int bytesToReceive, long timeoutMillis) throws IOException,
InterruptedException {
long time = 0;
while (mInStream.available() < bytesToReceive && time < timeoutMillis) {
time+=5;
Thread.sleep(5);
}
if (time == timeoutMillis) {
return false;
}
return true;
}
用类似的东西包围你的阅读 block :
if receivedInTimelyManner(instream,bytes,timeout){
read()
}
关于java - 在检查套接字的连接时从 BlueToothSocket 的 InputStream 中畅通读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212984/