#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.