我在来自 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 ]
如您所见,第 10 个字节被压入了一个额外的 0,并且包的其余部分向右移动(切断最后一个字节)
作为调试过程的一部分,我们尝试在 bytesRead += mmInStream.read(buffer, offset, buffer.length-offset)
处设置断点,令我们惊讶的是整个原始消息已收到。给出了什么?
读取中的“中断”如何纠正此问题?我做错了什么或不理解吗?
最佳答案
也许你的意思是
bytesRead = mmInStream.read(buffer, offset, buffer.length-offset);
offset += bytesRead;
而不是
bytesRead += ...
关于java - InputStream.read() 在我的缓冲区中丢失或添加了一个值 - 这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448531/