簡體   English   中英

檢查套接字連接時從BlueToothSocket的InputStream進行無阻塞讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM