Полученный байтовый массив не всегда корректен
У меня есть программа Arduino, которая отправляет через Bluetooth байтовый массив в программу Java.
Программа на Java получает данные о JSSC. Длина массива составляет 72 байта (18 с плавающей запятой по 4 байта). Как JSSC распознает конец передачи или узнает, что становится доступным новый байтовый массив?
В большинстве случаев передача правильная. Но время от времени отходы получаются.
Я нашел этот пример здесь.
Это если (event.getEventValue() == 10) означает перевод строки, но у bytearray нет перевода строки.
Arduino:
Serial.write (bytearray, размер bytearray);
Джава:
class SerialPortReader implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
int dataNumber = 0;
try {
if(event.isRXCHAR()){
if(event.getEventValue() >= BYTE_NUMBER){
receivedByte = usbPort.readBytes(BYTE_NUMBER);
if(receivedByte != null) {
isRequestOK = true;
byte[] myArray = new byte[FLOATSIZE];
for(int i = 0, y = 0; i < receivedByte.length; i++, y++) { //i < receivedByte.length-1
if(myArray == null) {
y = 0;
myArray = new byte[FLOATSIZE];
}
if((i + 1) % FLOATSIZE != 0) {
myArray[y] = receivedByte[i];
}
else {
myArray[y] = receivedByte[i];
receivedValue[dataNumber] = ByteBuffer.wrap(myArray).order(ByteOrder.LITTLE_ENDIAN).getFloat();
myArray = null;
dataNumber++;
}
}
}
}
}
} catch (SerialPortException e) { } ///InvocationTargetException oder NullPointerException
}//--------------------------- End of serialEvent -------------------------------------------------------------
}//--------------------------- End of SerialPortReader ------------------------------------------------------------
Кто-нибудь может мне помочь?
С наилучшими пожеланиями Вилли
PS Это мой первый вопрос на этом форуме. Надеюсь, я следовал правилам.