![](/img/trans.png)
[英]InputStream not getting anything while listening on a BluetoothSocket
[英]Unblocked read from InputStream of a BlueToothSocket while checking connection of the socket
我正在嘗試編寫一個將執行以下操作的線程:
1.從輸入流中讀取
2.其他常規;
3.如果套接字已關閉,則引發異常。
在此之前,已經設置了藍牙套接字和來自套接字的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()且關閉Bluetooth Socket時拋出異常? 贊賞!
這是我用的:
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;
}
用以下內容包圍您的讀取塊:
if receivedInTimelyManner(instream,bytes,timeout){
read()
}
好的,似乎沒有一種簡單的方法來進行無阻塞的read()並且available()拋出不起作用。 解決此問題的最方便方法是創建另一個線程來執行其他例程 。 同時不要理會此線程,特別是用於讀取輸入流和檢查輸入流狀態(拋出異常)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.