2016-04-10 12 views
-4

Lassen Sie sich diese Byte-Array nehmen:Wie teilt man ein Byte-Array in Java auf?

[FF 11 11 FF FF 22 22 22 FF FF 33 33 33 33 FF]

und lassen Sie sich das Trennzeichen wählen sein

[FF]

Dann wird die Spaltung in diesen drei Teilen zur Folge haben wird:

[11 11] [22 22 22] [33 33 33 33]

Antwort

0

Sie können schreiben (ac ouple of) Methoden, um dies zu erreichen, z.B .:

private List<byte[]> split(byte[] array, byte value){ 
    List<byte[]> list = new ArrayList<>(); 
    List<Byte> subList = new ArrayList<>(); 
    for(byte element : array){ 
     if(element == value && !subList.isEmpty()){ 
      list.add(convertToPrimitiveArray(subList)); 
      subList = new ArrayList<>(); 
     }else if(element != value){ 
      subList.add(element); 
     } 
    } 
    if(!subList.isEmpty()){ 
     list.add(convertToPrimitiveArray(subList)); 
    } 
    return list; 
} 

private byte[] convertToPrimitiveArray(List<Byte> list){ 
    byte[] array = new byte[list.size()]; 
    for(int i=0 ; i<list.size() ; i++){ 
     array[i] = list.get(i); 
    } 
    return array; 
} 

Es gibt die Liste der byte Arrays von dem Hauptarray gelieferten Wert mit splitten.

+0

oh, vielen dank! das ist eine Lösung! und ich habe die letzte Frage: manchmal bekomme ich Byte FF als Daten zwischen Trennzeichen und um Abgrenzung an falscher Position zu verhindern, verwende ich ein Escape-Symbol (Flag, das nächsten Wert ist kein Trennzeichen) vor es (BB) 11 dann habe ich FF 11 11 FF FF 22 22 22 BB FF 22 FF FF 33 33 FF wie zu lösen? –

+0

In diesem Fall müssen wir die erste for-Schleife ändern (die über Byte-Array iteriert) und ein paar Bedingungen setzen, um die nächsten und/oder vorher gescannten Elemente zu überprüfen, es sollte nicht schwierig sein. –