我试图通过蓝牙使用SPP将大文件(2.7MB)从服务器设备传输到Android设备。连接后,android设备读取可用字节并存储到2.7MB的缓冲区中。我正在使用变量" counter" (从0到127计数)以验证数据。
要进行实验,如果服务器设备逐字节输出文件,则所有数据都是正确的。但是,如果设备以n个字节的数据包输出(例如在这种情况下为128),则在android上接收的数据被破坏而没有任何一致的模式 - 它会错误地将值读取为0或1,但它始终固定在开头的包。
非常感谢任何有关如何防止数据丢失/损坏的建议。
在Android设备上接收:
int imageSize = 2718720;
int counter = 0;
int totalByte = 0;
byte[] buffer = new byte[imageSize];
while (totalByte < imageSize) {
int bytesAvailable = mInStream.available();
int numOfBytesRead = mInStream.read(buffer, totalByte, bytesAvailable);
for (int i = totalByte; i < totalByte + numOfBytesRead; i++) {
if (buffer[i] != counter) {
Log.d("BTDevice", Integer.toString(i) + ". read byte = " + Integer.toString(buffer[i] & 0xff) + " - Failed");
} else {
Log.d("BTDevice", Integer.toString(i) + ". read byte = " + Integer.toString(buffer[i] & 0xff));
}
counter++;
if (counter == 128) {
counter = 0;
}
}
totalByte += actualBytesRead;
}