Ho una matrice di byte grezzi che ho bisogno di tokenize a un elenco di array di byte in java. Spiegato meglio dalla seguente dichiarazione di metodo.Tokenize byte array
public static List<byte[]> splitMessage(byte[] rawByte, String tokenDelimiter)
Esempi di esecuzioni.
Esempio Run 1:
byte Raw
byte[] rawBytes = new byte[]{72,118,121,49,85,118,97,113,111,124,44,124,49,48,43,57,48,36,63,49,66,70,22,18,124,44,124,23,27,25,54,24,24,34,44,57,69,66,49,47,66,16,39,35,32,36,30,50,63,124,44,124,16,18,24,64,4,94,124,44,124,19,31,42,55,66,46,34,62,34,37};
tokenDelimiter
è |,|
(cioè 124,44,124
)
Così la lista restituita è così:
Token 1: 72,118,121,49,85,118,97,113,111
Token 2: 49,48,43,57,48,36,63,49,66,70,22,18
Token 3: 23,27,25,54,24,24,34,44,57,69,66,49,47,66,16,39,35,32,36,30,50,63,
Token 4: 16,18,24,64,4,94
Token 5: 19,31,42,55,66,46,34,62,34,37
Esempio Run 2:
byte[] rawBytes = new byte[]{72,118,121,49,85,118,97,113,111,124,44,124,49,48,43,57,48,36,63,49,66,70,22,18,124,44,124,124,44,124,23,27,25,54,24,24,34,44,57,69,66,49,47,66,16,39,35,32,36,30,50,63,124,44,124,16,18,24,64,4,94,124,44,124,19,31,42,55,66,46,34,62,34,37,124,44,124,124,44,124};
tokenDelimiter
è |,|
(cioè 124,44,124
)
Token 1: 72,118,121,49,85,118,97,113,111
Token 2: 49,48,43,57,48,36,63,49,66,70,22,18
Token 3: <Empty>
Token 3: 23,27,25,54,24,24,34,44,57,69,66,49,47,66,16,39,35,32,36,30,50,63,
Token 4: 16,18,24,64,4,94
Token 5: 19,31,42,55,66,46,34,62,34,37
Token 6: <Empty>
Token 7: <Empty>
Sono in grado di achive esempio eseguire dal seguente frammento di codice. Ma bloccato con tag nella seconda.
public static List<byte[]> splitMessageSept19(byte[] rawByte, String tokenDelimiter) throws UnsupportedEncodingException
{
List<byte[]> tokens = new ArrayList<byte[]>();
final byte[] byteArray = tokenDelimiter.getBytes("UTF-8");
final byte byteDelimitorFirstByte = byteArray[0];
int bytenum =0 ;
int lastIndex = 0;
int storIterator =0;
for (int iterator = 0 ; iterator <= rawByte.length ; iterator++)
{
if (iterator == rawByte.length || rawByte[iterator] == byteDelimitorFirstByte)
{
storIterator = iterator;
if (iterator != rawByte.length)
{
for (int i=0 ; i < byteArray.length ; i++)
{
if (rawByte[iterator] == byteArray[i])
{
iterator++ ;
continue;
}
else
{
break;
}
}
}
byte[] byteArrayExtracted = new byte[storIterator - lastIndex];
System.arraycopy(rawByte, lastIndex, byteArrayExtracted, 0,
storIterator - lastIndex);
lastIndex = iterator ;
tokens.add(byteArrayExtracted);
byteArrayExtracted = null;
}
}
for (byte[] bytetoken : tokens)
{
System.out.println("Token received is: " + new String(bytetoken, "UTF-8"));
}
return tokens;
}
Qualcuno ha affrontato un problema simile agli array di tokenizzazione? Si prega di suggerire se c'è un altro modo per tokenizzare gli array.
Nota: non voglio convertire il flusso di byte in String
, tokenize in formato String e convertirlo in byte. Potrebbe avere problemi di codifica.
perché non salti semplicemente i token vuoti nel tuo codice? – mishadoff