Что означает выражение "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