Что означает выражение "out |= ( in & 0x7F) << ( bytes++ * 7);" значит в яве?

Я просматривал внутреннюю обработку пакетов Minecraft, когда увидел их код чтения VarInt для чтения длины пакета. Как разработчик Java, который не имеет никакого курса Java, я был смущен, когда увидел заявление out |= ( in & 0x7F ) << ( bytes++ * 7 );, Может кто-нибудь, пожалуйста, объясните мне это? Заранее спасибо!

Если вам нужен весь код, просто проверьте функцию readVarInt на Github в BungeeCord https://github.com/SpigotMC/BungeeCord/blob/master/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java#L70.

1 ответ

Я не смотрел на ссылку, которую вы включили, но я ожидал, что эта строка будет вызываться в цикле для преобразования числа, хранящегося в виде коллекции 7-битных значений, обратно в int или long.

Строка, которую вы дали, может быть расширена до этого:

int value = in & 0x7F;            // Grab 7 bits of data from "in"
int shift = bytes * 7;            // Calculate shift amount based on byte index
bytes = bytes+1;                  // Increment byte index (from bytes++)
out = out | (value << shift);     // Shift value and OR into output integer/long
Другие вопросы по тегам