Итак, я получаю байтовые массивы с USB-устройства (некоторые сообщения журнала) и сталкиваюсь с проблемой, я не знаю, как лучше всего их анализировать или читать ...
Итак, это получатель:
static class ReceiveLogsThread implements Runnable {
private static final String TAG = "IoTReceiveLogsThread";
Message msgRead;
ReceiveLogsThread() {
}
public void run() {
byte[] rbuf = new byte[4096];
while (!Thread.currentThread().isInterrupted()) {
try {
int len = mSerial.readLog(rbuf, mSerialPortLog);
if (len > 0) {
// Crashlytics.log(Log.DEBUG, TAG, "ReceiveLogsThread: " + printHex(rbuf));
// this.msgRead = receiveLogsHandler.obtainMessage(HANDLE_READ, printHex(rbuf));
this.msgRead = receiveLogsHandler.obtainMessage(HANDLE_READ, rbuf);
receiveLogsHandler.sendMessage(this.msgRead);
}
} catch (NullPointerException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
Thread.currentThread().interrupt();
if (!mReadFlag) {
Crashlytics.log(Log.WARN, TAG, "Receive thread finished");
}
}
}
Как видите, метод printHex () прокомментирован, потому что я думаю, что это вызвало у меня проблему с потерей некоторых из этих сообщений из-за парсинга в реальном времени, как вы можете видетьиз его реализации
private static String printHex(byte[] bytes) {
Formatter formatter = new Formatter();
for (byte b : bytes) {
formatter.format("%02x", b);
}
String hex = formatter.toString();
return hex;
}
Я не думаю, что это хорошая идея сделать метод printHex, как только я получу байтовый массив, потому что байты передаются так быстро, поэтому я хочу попробовать другой способ ...
Я хочу отправить их в виде байтовых массивов, а затем проанализировать их после того, как я закончу со всем, поэтому я не уверен, как правильно это реализовать ...
Вот получениеобработчик из моей деятельности, где я храню эти массивы в список байтовых массивов, которые могут содержать как 30000 байтовых массивов:
private List<byte[]> logs = new ArrayList<>();
Handler receiveLogsHandler = new Handler(Looper.getMainLooper()) {
public void handleMessage(Message msgRW) {
super.handleMessage(msgRW);
// logMessagesList.add(msgRW.obj.toString().toUpperCase());
// String message = msgRW.obj.toString().toUpperCase();
if(shouldCollectLogs) {
byte[] message = (byte[]) msgRW.obj;
logs.add(message);
}
....
Итак, проблема, с которой я здесь сталкиваюсь, заключается в том, как объединить все эти байтовые массивыв один!А затем сделайте printHex для этого одного большого массива ..