在尝试通过蓝牙从我的arduino接收消息时,inputStream.read()方法存在小问题。我正在尝试在EOF时获得-1个字节。问题是,我不明白。
InputStream.read()在接收到最后一个数据之后得到阻塞,并等待更多数据。如 据我所知,它可以正常工作。
我进行了一些研究,发现您无法获得EOF(-1),直到服务器(arduino)关闭他的流(输出流?)。 我想知道我朝着正确的方向去理解,如果是的话,那么,如果我关闭来自arduino的流,那么下面的代码循环将起作用吗?
也许更好的方法是在数据末尾添加特殊符号?
你们如何解决这样的问题? :)
override fun run() {
Log.d(TAG, getLogString("BEGIN connected thread.", device))
name = device.name + device.address
connected = true
val buffer = ByteArray(1024)
var bytes: Int
while (connected) {
try {
bytes = inputStream!!.read(buffer)
if (bytes = -1) {
//Don't work
Log.d(TAG,"EOF")
}
val message = String(buffer, 0, bytes)
handler.obtainMessage(BluetoothApi.MESSAGE_READ, message).sendToTarget()
// For debug purposes.
Log.d(TAG, getLogString("Received message: $message", device))
} catch (e: IOException) {
Log.e(TAG, getLogString("Disconnected.", device), e)
connectionLost()
break
}
}
}