2017-01-14 184 views
0

我正在實施通過兩個Android設備之間的藍牙在Android中發送數據。爲了簡單起見,我將主要傳遞字符串並將它們解析爲JSON或其他字符串格式。在Android中通過藍牙發送字符串(字節)

現在我想知道,我應該如何讀取數據以確保我已收到所有這些數據?目前,我採取以下做法:

byte[] buffer = new byte[1024]; 

while (!finished) { 

    // My class 
    MemoryStream ms = new MemoryStream(); 

    int bytesRead = 0; 
    do { 
     bytesRead = input.read(buffer, 0, buffer.length); 
     ms.write(buffer, 0, bytesRead); 
    } while (bytesRead == buffer.length); 

    // Now process data 
} 

然而,這種方法僅當作爲被另一臺設備上發送inputStream.read()總是返回的字節數。例如,假設第一個設備發送1234字節,第一個調用read將返回1024,第二個210.或者如果第一個設備發送1024個字節,則首先調用read將返回1024個字節, -1(流結束)。

我對不對?還是應該實現我自己的確定機制,是否收到所有發送的數據(或者我應該等待更多才能完成當前塊)?

回答

0

答案是:。傳輸可能會結束(根據input.read),而不是整個發送的緩衝區被傳送。

人們必須防範傳輸,最好是以數據的大小以字節爲單位,然後讀取數據直到所有數據都被傳輸。

相關問題