byte array splitten

mjdv

Bekanntes Mitglied
Hey Leute,

ich habe gerade ein komisches Problem. Ich empfange gerade Daten über Bluetooth auf einem Android Gerät. Diese Daten gibt es nur als Byte Array (byte[]). Jetzt möchte ich diese interpretieren, zB ist der Divider des Protokolls ein Carriage return ('\r'). Ich würde die ankommenden Daten nun eben gerne splitten in die einzelnen KOmmandos. Des weiteren würde ich gerne, startswith nutzen um die einzelnen KOmmandos zu interpretieren.

Nun meine Frage, wgibt es eine Möglichkeit byte arrays zu splitten nach einen bestimmeten Zeichen und eine startswith Methode zu verwenden.

Ich weiß jetzt nciht ob es gut ist, einfach die bytes zu einem String zu machen, da ich die als byte array auch wieder weiterschicken muss und dort auch Sprache übertragen wird.

Ich hoffe ihr könnt mir ein wenig helfen 😀
 
Bits sind nur bits, natürlich gibt es eine Möglichkeit. Ein hin- und her-verwandeln in String kann gefährlich sein, wegen der character encodings. Eine Möglichkeit ist natürlich das Erstellen neuer Arrays und umkopieren mit System.arraycopy, oder Arrays.copyOfRange. Eine startsWith-Methode müßte man selbst schreiben, obwohl sie theoretisch mit Arrays.copyOfRange und Arrays.equals nachgebaut werden könnte. Aber alle diese Ansätze haben ein Problem: Sie hantieren mit Speicher rum (also allokation und deallokation/gc). Android ist da AFAIK etwas... empfindlich. (Die offizielle Empfehlung ist ja ein Augenzwinkerndes: "Do not allocate memory - at all!"). Je nachdem, worum es genau geht, könnte (!) es "besser" sein, sich die relevanten Teile zu merken. Also nicht sowas machen wie
Code:
void machWasMit(byte data[]) {...}
// Aufruf:
machWasMit(Arrays.copyOfRange(fullData, min, max));
sondern
Code:
void machWasMit(byte fullData[], int min, int max) { ... }
// Aufruf:
machWasMit(fullData);

Aber das musst du entscheiden...
 
Ja genau, das mit den Strings ist wohl wikrlich nciht optimal.

Ja das mit dem nachbauen könnte ich versuchen. Hast du vll. einen Link zu weiteren Infos zur Speicherallokation bei Android?

Wie interprtiert man den sonst byte Arrays?? Ich meine ich bekomme ja zB von einem DatagramSocket auch nur byte Arrays, und dort werden ja auhc Protokolle interpretiert, wie machen die denn das? 😀
 
Ich hatte mir da mal ein Video angesehen, KÖNNTE das hier gewesen sein: YouTube - Google I/O 2008 - Dalvik Virtual Machine Internals (hab's aber nicht verifiziert). Dort wurde eben gesagt, dass Speicherallokationen wo nur irgend möglich vermieden werden sollten, aber ... natürlich geht es nicht komplett. Es wurde aber (afair) auch gesagt, dass es vorteilhaft sein kann, Sachen zu machen, die üblicherweise in Java als stilistische no-gos angesehen werden. Sooo tief bin ich da aber auch nicht drin.
 

Neue Themen


Zurück
Oben