InputStream.read(byte [] b)阻塞的循环,不返回EOF(-1)

时间:2018-08-02 20:44:29

标签: java android bluetooth kotlin

在尝试通过蓝牙从我的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
            }
        }
    }

0 个答案:

没有答案