Обработка данных, приводящая к нарушению целостности данных через Bluetooth на Android

#java #android #bluetooth #inputstream

#java #Android #bluetooth #входной поток

Вопрос:

Я обрабатываю некоторые двоичные данные, которые я получаю через Bluetooth, однако, когда поступает много данных одновременно, я получаю недостающие или недопустимые байты в моем потоке данных. Я надеялся, что кто-нибудь сможет помочь мне с этим, поскольку мне нужна помощь в получении более последовательного ответа. Меня вполне устраивает простое «выбрасывание» неверных данных. Вот соответствующие методы, они выполняются внутри «Подключенного» потока:

     public void run() {
        Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[1024];
        int num_bytes = 0;
        // Keep listening to the InputStream while connected
        while (true) {
            try {
                // Read from the InputStream
                mmInStream.read(buffer, 0, 11);
                processBytes(buffer);

            } catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
    }

    private void processBytes(byte[] bytes) throws IOException {
        if (bytes[0] != delimiter) {
            int c;
            do {
                c = mmInStream.read();
            } while (c != delimiter amp;amp; c != -1);
            if (c == -1) {
                return;
            }
        }
        /*Some processing happens here to generate the variables cellId and
                      voltage and cellId2 and voltage2
                    */
        // Send the obtained bytes to the UI Activity
        mHandler.obtainMessage(BluetoothInterface.DATA_READ,
                new DataPoint(cellId, voltage)).sendToTarget();
        // Send the obtained bytes to the UI Activity
        mHandler.obtainMessage(BluetoothInterface.DATA_READ,
                new DataPoint(cellId2, voltage2)).sendToTarget();

    }
  

Ответ №1:

У меня была эта проблема раньше. Я не совсем уверен, решил ли я это, прочитав поток в объект string перед вызовом processBytes.