Comprendre code java construction d'un nombre par fragment de bits d'un Long
Bonjour tout le monde,
Voici un code qui prend un nombre long et et le fragmente par couple de 7 bits
et place ces 7 bits dans des payloads avec le bit (continue) tout à gauche dans un octet qui commence par 1
sauf le dernier qui commence par 0. Mais je ne comprends pas bien le code.
- (max << 7) |0x7fL >> décale de 7 bits vers la gauche mais le reste ???
>>> décale de x bits à droite en insérant des 0 à gauche
mais je ne comprends pas bien ce que fait value >>> (i*7) ??
(int)((temp | 0x80) & 0xff) je ne comprends pas non plus 0x80 et 0xff quel est l'effet ??...
Pouvez vous m'aider à comprendre le code merci.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
static private final int SHORT_INTEGER_MAX = 127;
protected void appendUintvarInteger(long value, DataOutputStream f) {
/*
* To encode a large unsigned integer, split it into 7-bit fragments
* and place them in the payloads of multiple octets. The most significant
* bits are placed in the first octets with the least significant bits
* ending up in the last octet. All octets MUST set the Continue bit to 1
* except the last octet, which MUST set the Continue bit to 0.
*/
int i;
long max = SHORT_INTEGER_MAX;
for (i = 0; i < 5; i++) {
if (value < max) {
break;
}
max = (max << 7) | 0x7fl;
}
while(i > 0) {
long temp = value >>> (i * 7);
temp = temp & 0x7f;
append((int)((temp | 0x80) & 0xff), f);
i--;
}
append((int)(value & 0x7f), f);
} |