两个字节数组,一个是从蓝牙接收的,另一个是发送的字节数组的精确副本不匹配。
我有这个对象用于发送信号。
object Signals {
val ENABLE_HOTSPOT = "01".toByteArray()
val DISABLE_HOTSPOT= "02".toByteArray()
}
我正在ConnectedThread中使用此函数发送字节数组
fun write(barr: ByteArray) {
try {
Log.d(LOG_TAG, "Writing $barr ${String(barr)}")
outputStream.write(barr)
} catch (e: IOException) {
Log.e(LOG_TAG, "Exception during write()", e)
}
}
并以此接收
override fun run() {
while (true) {
try {
Log.d(_LOG, "Waiting to read.")
inputStream.read(buffer)
} catch (e: IOException) {
Log.e(_LOG, "Input stream was disconnected.", e)
connection_lost()
break
}
Log.d(_LOG, "Read message $buffer ${String(buffer)}")
receiver.receive(buffer)
}
}
接收功能是这个
override fun receive(byteArray: ByteArray) {
when {
// These never match
byteArray.contentEquals(Signals.ENABLE_HOTSPOT) -> {
setHotspot(true)
}
byteArray.contentEquals(Signals.DISABLE_HOTSPOT) -> {
setHotspot(false)
}
else -> {
Log.d(LOG_TAG, "Nothing matched .${String(byteArray)}. .${String(Signals.ENABLE_HOTSPOT)}." +
" .${String(Signals.ENABLE_HOTSPOT) == String(byteArray)}.")
}
}
}
我尝试与“ ==”运算符匹配,并尝试与contentEquals匹配,我什至将when
关键字更改为一堆if
,但是它们都不起作用。我都记录了发送和接收的字节数组。尽管直接像"$byteArray"
一样打印时它们是不同的,但是用String(byteArray)
上移为字符串时它们是相同的。
我不知道为什么这些不匹配,有办法吗?