В цикле while ниже я нахожу странное поведение с выводом.Я потратил несколько часов, просматривая его, но я не понимаю, почему он возвращает так, как он делает.
while (true) {
try {
Log.d("DEBUG BT - BT Service", "IN CONNECTED THREAD RUN");
for(byte firstbyte : buffer){
int j = 0;
int nbytes = mmInStream.read(buffer); //read bytes from input buffer
// int nbytes = mmInStream.available();
String readMessage = new String(buffer, 0, nbytes, "ISO-8859-1");
firstbyte = buffer[j];
byte[] adjbuff;
if(firstbyte == 90){
adjbuff = Arrays.copyOfRange(buffer, 0, 21);
Log.i("Buffer conditioning", "Solenoid syncbyte ran from Connectedthread");
mHandler.obtainMessage(MESSAGE_READ, 22, -1, adjbuff).sendToTarget();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("data incoming loop", "Break at if");
break;
}else if(firstbyte == -91){
adjbuff = Arrays.copyOfRange(buffer, 0, 24);
Log.i("Buffer conditioning", "Sensor syncbyte ran from Connectedthread");
mHandler.obtainMessage(MESSAGE_READ, 25, -1, adjbuff).sendToTarget();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("data incoming loop", "Break at if");
break;
Если firstbyte == 90
истинно, то код внутри этого блока if повторяется 21 раз,Если firstbyte == -91
истинно, то код внутри этого блока if повторяется 24 раза.Мне не кажется совпадением, что он повторяет ровно количество раз во втором параметре Arrays.copyOfRange()
, но второй параметр должен указывать позицию последнего байта, который я хочу включить в массив?
Кто-нибудь знает, почему это происходит?У меня нет идей для устранения этой проблемы.