2017-05-21 2 views

Antwort

2

DataInputStream#readUnsignedShort geben Sie eine int zurück, die 32 Bits ausgeben, aber der short Typ 16 Bits ausgeben.

int << 16 verschiebt die niedrigen 16 Bits auf hohe 16 Bits und füllt 0 in den niedrigen 16 Bits. Zum Beispiel:

int value = 0b11111111000000001000000011111111; 
           ^---------------  
       int high = 0b10000000111111110000000000000000; 
       // high == value << 16 

in diesem Fall, und der Operator ist | verbindet High-Bits und Low-Bits zusammen. zum Beispiel:

int high = 0b10000000111111110000000000000000; 
int low = 0b00000000000000001000000000000001; 
int value = 0b10000000111111111000000000000001; 
// value == high | low; 

auf der anderen Seite, das Protokoll ein int in zwei short rettende, die ein hohes short und eine niedriges short ist. und der obige Code ist der int Wert von zwei short s gelesen.

für weitere Details können Sie bitewise operators und shift operators sehen.

+0

Können wir nicht 'readInt()' für diesen Zweck verwenden, da es 4 Bytes liest? –

+0

@Pegusus ja, 'readInt' liest 4 Bytes, aber' readUnsignedShort' liest 2 Bytes. und das 'readInt' wird manchmal negative Zahlen ergeben, aber' readUnsignedShort' ist nie. –