2

BluetoothChat サンプルから取得した ConnectedThread の run() メソッドで、次の手順を作成しました。

// Read from the InputStream
byte[] buffer = new byte[16];
int offset = 0;
while(buffer.length-offset != 0)
{
    int bytesRead += mmInStream.read(buffer, offset, buffer.length-offset);
    offset += bytesRead;
}
// Do stuff with the contents of the buffer

バッファーは予想どおり 16 バイトで徐々に読み込まれますが、何らかの理由で配列の 10 番目のバイトに 0 が挿入され、パッケージの残りの部分がシフトされます (したがって、パッケージ全体が破損します)。

これは何が起こっているかの例です

以下は、他のクライアントから送信されます。

[-11, 126, -16, -30, -92, 110, -26, 13, 22, 91, -31, 32, 54, -125, -112, 45]

これは私が受け取るものです:

[-11、126、-16、-30、-92、110、-26、13、22、91、0、-31、32、54、-125、-112]

ご覧のとおり、余分な 0 が 10 番目のバイトとして挿入され、パッケージの残りの部分が右にシフトされます (最後のバイトが切り取られます)。

デバッグ プロセスの一環として、ブレークポイントを設定しようとbytesRead += mmInStream.read(buffer, offset, buffer.length-offset)したところ、驚いたことに、元のメッセージ全体が受信されました。何を与える?

読み取りの「中断」は、この問題をどのように修正しますか? 私は何を間違っているか、理解していませんか?

4

2 に答える 2

3

おそらくあなたが意味した

bytesRead = mmInStream.read(buffer, offset, buffer.length-offset);
offset += bytesRead;

それ以外の

bytesRead += ...
于 2013-05-08T19:32:06.323 に答える
0

全部捨てて使うDataInputStream.readFully().

于 2013-05-09T02:54:52.497 に答える