InputStream.read()丢失或在我的缓冲区中添加一个值 - 为什么?

时间:2013-05-08 19:18:21

标签: java android bluetooth

我在从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)处设置断点,令我们惊讶的是收到了整个原始消息。是什么给了什么?

读取中的“中断”如何解决此问题?我做错了什么或不理解?

2 个答案:

答案 0 :(得分:3)

可能你的意思是

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

而不是

bytesRead += ...

答案 1 :(得分:0)

扔掉它并使用DataInputStream.readFully().