2017-01-14 25 views
0

Androidで2つのAndroidデバイス間でBluetoothを使用してデータを送信することを実装しています。わかりやすくするために、私はほとんどの場合、文字列を渡してJSONまたは他の文字列形式として解析します。AndroidでBluetooth経由で文字列(バイト)を送信する

今私は、すべてのデータを受け取ったことを確認するために、データをどのように読み取るべきでしょうか?現在、私は次のようなアプローチを取っている:

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と2番目の210が返されます。または、最初のデバイスが1024バイトを送信した場合、最初にreadを呼び出して1024バイトが返され、 -1(ストリーム終了)。

私は正しいですか?または、送信されたすべてのデータが受信されたかどうかを判断する独自のメカニズムを実装する必要がありますか(または現在のチャンクを完了するのにもっと待つ必要がありますか)。

答えて

0

答えはなしです。送信は(input.readで)終了し、送信されたバッファ全体が転送されるわけではありません。

送信を保護する必要があります。データのサイズをバイト単位で前処理し、すべてのデータが転送されるまでデータを読み取ることが望ましいです。

関連する問題