我正在开发一个Android应用程序,它通过蓝牙从Asuro
接收一个bytearray,这是一个小机器人。
此bytearray是命令协议,因此固定大小为15 此外,应用程序将bytearray发送到Asuro,Asuro将其发回。
但是,如果我使用read(byte [],0,15)函数并将此数组赋予Log.d,则此bytearray会被拆分。
请参阅以下代码:
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[15];
int bytes = 0;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer, 0, 15);
if (buffer[0] != 0) {
Log.d("Asuro-Android", "Input :" + Arrays.toString(buffer));
}
buffer = new byte[15];
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}
我要发送给Asuro:
Output: [58, 48, 49, 48, 48, 48, 49, 48, 48, 48, 51, 48, 48, 48, 48]
连接等工作。为了简化它,我创建了一个数组并将其刷新到输出流中。
但我得到了:
Input :[58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Input :[48, 49, 48, 48, 48, 49, 48, 48, 48, 51, 0, 0, 0, 0, 0]
Input :[48, 48, 48, 48, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
这可能是我(app)的错误,或者这只是asuro的错误吗?
答案 0 :(得分:1)
这是蓝牙SPP配置文件的性质,它不提供帧边界。 因此它可以被发送方SPP本身或接收方分开,具体取决于其缓冲容量等。 在你的情况下,由于数据包总是固定大小,你可以做一个简单的重新组装或更常见的情况下添加你赢得的标题并重新组装一个框架。