Javaでバイト配列のリストにトークン化する必要がある生のバイトの配列があります。次のメソッド宣言でよりよく説明されています。
public static List<byte[]> splitMessage(byte[] rawByte, String tokenDelimiter)
実行例。
実行例 1:
生バイト
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
です|,|
(つまり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: 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
実行例 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
です|,|
(つまり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>
次のコード スニペットから例を実行できます。しかし、2番目のタグで立ち往生しました。
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;
}
配列をトークン化するという同様の問題に直面した人はいますか? 配列をトークン化する他の方法があれば提案してください。
注: バイト ストリームを に変換したりString
、文字列形式でトークン化したり、バイトに戻したりする必要はありません。エンコーディングの問題がある可能性があります。