2016-04-10 44 views
-4

en bu bayt dizisi atalım:Java'da bir bayt dizisi nasıl bölülür?

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

ve en

[FF]

Sonra bölünmüş bu üç bölümden sonuçlanacaktır olmak ayırıcı seçmesine izin:

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

cevap

0

Yazabilirsiniz (ac yöntemleri) ouple Sunulan değer ile temel bir dizi bölme ile byte dizileri listesini verir .:

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; 
} 

, örneğin bunun için.

+0

oh, çok teşekkürler! Bu bir çözüm! ve son bir sorum var: bazen bayt FF'yi sınırlayıcılar arasında veri olarak ve yanlış pozisyonda sınırlamayı engellemek için bir kaçış sembolü kullanıyorum (bir sonraki değer, bayrak sınırlayıcı değil) ondan önce (BB varsayalım) sonra FF 11 11 FF FF 22 22 22 BB FF 22 FF FF 33 33 FF bunu nasıl çözebilirim? –

+0

Bu durumda, ilk for döngüsünü (byte dizisi üzerinden yinelenen) değiştirmeli ve bir sonraki ve/veya daha önce taranan öğeleri kontrol etmek için birkaç koşul koymamız gerekir, bu zor olmamalıdır. –

İlgili konular