Я разрабатываю приложение для своего собственного использования. Устройство Android взаимодействует с другими устройствами. Раньше я общался через Bluetooth
, но на данный момент я меняю сообщение на USB
. Я использую ksksue FTDriver. И я столкнулся с циклом мышления и не могу от него избавиться :)Последовательная связь с другими устройствами
В принципе, есть фиксированные 6 байтов данных, которые мне нужно получить с устройства. 2 байта данных и 4 байта CRC. Я принимал 1 байт на 1 и добавлял его в другой массив байтов, когда достигал 6 байтов, а затем возвращал их в новые массивы байтов и обрабатывал их, если CRC равен.
Это из Bluetooth приложение
public void run() {
byte[] buffer = new byte[1]; // buffer store for the stream
int bytesAvailable; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
bytesAvailable = mmInStream.read(buffer);
System.arraycopy(buffer, 0, input_bytes_from, last, buffer.length);
last++;
if (last == 6){
last = 0;
Log.d(TAG,"received "+bytesToHex(input_bytes_from));
byte[] data_bytes = new byte[2];
byte[] crc_to_compare = new byte[4];
for(byte i=0;i<data_bytes.length;i++)data_bytes[i] = input_bytes_from[i];
for(int i=0;i<4;i++){
crc_to_compare[i] = input_bytes_from[i+data_bytes.length];
}
crc_test(data_bytes,crc_to_compare);
}
}
catch (IOException e) {
break;
}
}
}
- Что происходит в байт/с, когда
bytesAvailable = mmInStream.read(buffer);
называется? Один байт скопирован и удален сmmInStream.read
? - Есть ли более быстрый и лучший способ сделать это? Потому что, как я понимаю, копирование по одному байту происходит медленно?