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 回答