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)
したところ、驚いたことに、元のメッセージ全体が受信されました。何を与える?
読み取りの「中断」は、この問題をどのように修正しますか? 私は何を間違っているか、理解していませんか?