Java BluetoothChat发送较大数据时的传输错误示例

Java BluetoothChat发送较大数据时的传输错误示例,java,android,bluetooth,stream,transmission,Java,Android,Bluetooth,Stream,Transmission,我正在尝试为Android编写一个应用程序,在两部手机之间交换数据。(安卓4.2.1和4.4.2) 作为基础,我使用了android教程部分的BluetoothChat示例。 我的问题是:当写入大量数据(>1kB)时,接收方通常会得到错误的数据。有时它接收看似无关的数据,有时它接收多个连续0的部分,有时它甚至接收以前在同一消息中接收到的部分 变速箱的处理方式如下所示: 首先,我发送一个4字节的头,它提供以下消息的长度及其消息类型(仅一个字节指示程序如何理解消息) 然后是实际的消息 我使用了Blu

我正在尝试为Android编写一个应用程序,在两部手机之间交换数据。(安卓4.2.1和4.4.2) 作为基础,我使用了android教程部分的BluetoothChat示例。 我的问题是:当写入大量数据(>1kB)时,接收方通常会得到错误的数据。有时它接收看似无关的数据,有时它接收多个连续0的部分,有时它甚至接收以前在同一消息中接收到的部分

变速箱的处理方式如下所示: 首先,我发送一个4字节的头,它提供以下消息的长度及其消息类型(仅一个字节指示程序如何理解消息) 然后是实际的消息

我使用了BluetoothChat中的ConnectedThread,但实现为一个AsyncTask,否则它与接收完全相同,接收处理如下:(如上所述)

发送端完全相同

write(byte[] bytes) {
    outputStream.write(bytes); // I excluded the try/catch here
}
测试多个字符串并通过简单调用string.getBytes()进行转换,结果是:

正在正确传输130字节字符串

正在正确传输1443字节字符串

51948字节字符串在约900字节后失败。日志将正确写入字符串,直到只打印奇怪的“菱形问号”符号为止

然而,失败的时刻是可变的

outputStream.write(字节)可以处理的字节数是否有限制?有人知道为什么通过流发送字节会失败吗?一些内部缓冲区问题?可能是一个循环缓冲区(有时旧的消息部分会重复)


非常感谢您的帮助,由于这个问题,我已经损失了几个小时(尝试编写和阅读较小的块,但没有多大帮助)

与此同时,我确实找到了一种让它工作的方法,只需阅读可用的内容,而不是使用inputStream.read(缓冲区),但我仍然不明白第一种方法为什么不起作用。代码:int available=inStream.available();如果(可用>0){byte[]缓冲区;inStream.read(缓冲区);}
write(byte[] bytes) {
    outputStream.write(bytes); // I excluded the try/catch here
}