Я предполагаю, что проблема только в сравнении байтов и байтов. Работа с массивами проста, поэтому я не буду ее охватывать. Что касается байта против байта, моя первая мысль сделать это:
public class ByteComparator implements Comparator<byte> {
public int compare(byte b1, byte b2) {
return new Byte(b1).compareTo(b2);
}
}
Но это не будет лексикографическим: 0xFF (байт со знаком для -1) будет считаться меньшим, чем 0x00, когда лексикографически оно больше. Я думаю, что это должно сработать:
public class ByteComparator implements Comparator<byte> {
public int compare(byte b1, byte b2) {
// convert to unsigned bytes (0 to 255) before comparing them.
int i1 = b1 < 0 ? 256 + b1 : b1;
int i2 = b2 < 0 ? 256 + b2 : b2;
return i2 - i1;
}
}
Возможно, что-то есть в библиотеках Apache commons-lang или commons-math, которые делают это, но я не знаю, как это делается.