Как этот код можно упростить?

183
12 ноября 2018, 02:40
public long getLong() {
    return (data.get(pointer++) & 0xFF) << 4 | (data.get(pointer++) & 0xFF) << 56
            | (data.get(pointer++) & 0xFF) << 48 | (data.get(pointer++) & 0xFF << 32)
            | (data.get(pointer++) & 0xFF) << 24 | (data.get(pointer++) & 0xFF) << 16
            | (data.get(pointer++) & 0xFF) << 8 | (data.get(pointer++) & 0xFF);
}

Поинтер тут для того, что бы следующий вызов метода getLong() читал далее байты, как это упростить? Выходит, что мне нужно что-то на подобии DataInputStream, но с поинтером.

Answer 1

Например, так

public long getLong() {
  int[] shifts = {4, 56, 48, 32, 24, 16, 8, 0};
  long res = 0;
  for (int shift : shifts)
    res |= data.get(pointer++) & 0xFF) << shift;
  return res;
}
READ ALSO
Трансляция С++-кода для Java-машины

Трансляция С++-кода для Java-машины

Так получилось, что я много работал на С/С++ и не работал на JavaА теперь, смотрю, для мобильных платформ Java очень востребована

247
Ошибка при запуске Java апплета macOS

Ошибка при запуске Java апплета macOS

При запуске апплета на macOS 1013

208
Как задать массиву - длину по заполнению в Java?

Как задать массиву - длину по заполнению в Java?

Как задать массиву длину по заполняемым данным? К примеру, генерируем случайные числа в массив i от 1 до 100создаем цикл for и который перебирает...

282
Запись связных сущностей Hibernate

Запись связных сущностей Hibernate

пишу Rest Web-сервис, Spring Boot+Hibernate+Postgres, есть три сущности: класс А, В и А_В, ссылающийся на оба через ManyToOne, связь onedirectionalНадо записать А_В при этом...

296