2014-04-07 3 views
2

패킷 길이를 읽는 VarInt 읽기 코드를 보았을 때 Minecraft의 내부 패킷 처리를 둘러 보았습니다. java의 과정이없는 자바 개발자로서 나는 out |= (in & 0x7F) << (bytes++ * 7);이라는 문장을 보았을 때 혼란 스러웠다. 누군가 제게 설명해 주시겠습니까? 미리 감사드립니다!"out | = (in & 0x7F) << (바이트 ++ * 7);" 자바 말인가요?

전체 코드를 보려면 BungeeCord의 Github https://github.com/SpigotMC/BungeeCord/blob/master/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java#L70에서 readVarInt 함수를 확인하십시오.

+2

그것은 누군가가 비밀 코드를 작성하기로했다 의미한다. –

+0

당신은 그것이 무엇을 의미한다고 생각합니까? 당신은 그것을 들여다 보았습니까? –

+0

그래, 읽는 것이 그렇게 어렵지는 않다. –

답변

2

포함 된 링크를 보지 못했지만이 줄을 루프에서 호출하여 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