Одна из вещей, которую вы можете сделать, это заменить (byte[a]&0xff)>>b
на byte[a]>>>b
Кроме того, вам не нужно &0xff
, когда вы переключаетесь влево.
Хотя это может и не иметь значения, добавление final к tmp
или удаление объявления из цикла может помочь совсем немного.
Другая вещь может попробовать это:
int tmp=bytes[bytes.length-1];
for (int i = bytes.length-2; i >=0; i--) {
tmp=(tmp<<8)|bytes[i];
bytes[i] = (byte) (tmp>>>rightShifts);
}
Затем вы решаете байты [bytes.length-1].
Этот обратный цикл также может помочь, если вы суеверны. Я видел, как это работает раньше.
Анализ циклов за проход:
ваш: 3 задания, две смены, одна или, одна каста.
мой: 2 задания, две смены, одна или, одна каста.