2016-04-10 8 views
-4

のは、このバイト配列見てみましょう:Javaでバイト配列を分割する方法は?

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

:その後、分割はこれらの三つの部分になります

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

をしてのは

[FF]

する区切り文字を選択してみましょう

答えて

0

あなたはこれを達成するための)方法のouple、例えば:

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

これは提供された値とメインアレイを分割することによってbyte配列のリストを返します。

+0

ああ、ありがとう!それは解決策です!私は最後の質問を持っています:時々、デリミタ間のデータとしてバイトFFを取得し、間違った位置での区切りを防止するために、エスケープシンボル(次の値がデリミタでないことを意味するフラグ) FF FF 22 22 22 BB FF 22 FF FF 33 33 FFどのようにそれを解決するには? –

+0

その場合、最初のforループ(バイト配列を繰り返し処理する)を変更し、次および/または以前スキャンされた要素をチェックする条件をいくつか設定する必要があります。 –