@@ -27,41 +27,47 @@ public class IntegerEncoder extends AbstractEncoder<Integer> {
2727
2828 public static final IntegerEncoder INSTANCE = new IntegerEncoder ();
2929
30+ // VarInt encoding constants
31+ private static final int VARINT_MASK = 0x7F ;
32+ private static final int VARINT_CONTINUE_FLAG = 0x80 ;
33+ private static final int VARINT_SHIFT = 7 ;
34+ private static final int DIRECT_WRITE_THRESHOLD = 128 ;
35+
3036 @ Override
3137 public void encode (Integer data , OutputStream outputStream ) throws IOException {
3238 // if between 0 ~ 127, just write the byte
33- if (data >= 0 && data < 128 ) {
39+ if (data >= 0 && data < DIRECT_WRITE_THRESHOLD ) {
3440 outputStream .write (data );
3541 return ;
3642 }
3743
3844 // write var int, takes 1 ~ 5 byte
3945 int value = data ;
40- int varInt = (value & 0x7F );
41- value >>>= 7 ;
46+ int varInt = (value & VARINT_MASK );
47+ value >>>= VARINT_SHIFT ;
4248
43- varInt |= 0x80 ;
44- varInt |= ((value & 0x7F ) << 8 );
45- value >>>= 7 ;
49+ varInt |= VARINT_CONTINUE_FLAG ;
50+ varInt |= ((value & VARINT_MASK ) << 8 );
51+ value >>>= VARINT_SHIFT ;
4652 if (value == 0 ) {
4753 outputStream .write (varInt );
4854 outputStream .write (varInt >> 8 );
4955 return ;
5056 }
5157
52- varInt |= (0x80 << 8 );
53- varInt |= ((value & 0x7F ) << 16 );
54- value >>>= 7 ;
58+ varInt |= (VARINT_CONTINUE_FLAG << 8 );
59+ varInt |= ((value & VARINT_MASK ) << 16 );
60+ value >>>= VARINT_SHIFT ;
5561 if (value == 0 ) {
5662 outputStream .write (varInt );
5763 outputStream .write (varInt >> 8 );
5864 outputStream .write (varInt >> 16 );
5965 return ;
6066 }
6167
62- varInt |= (0x80 << 16 );
63- varInt |= ((value & 0x7F ) << 24 );
64- value >>>= 7 ;
68+ varInt |= (VARINT_CONTINUE_FLAG << 16 );
69+ varInt |= ((value & VARINT_MASK ) << 24 );
70+ value >>>= VARINT_SHIFT ;
6571 if (value == 0 ) {
6672 outputStream .write (varInt );
6773 outputStream .write (varInt >> 8 );
@@ -70,7 +76,7 @@ public void encode(Integer data, OutputStream outputStream) throws IOException {
7076 return ;
7177 }
7278
73- varInt |= (0x80 << 24 );
79+ varInt |= (VARINT_CONTINUE_FLAG << 24 );
7480 outputStream .write (varInt );
7581 outputStream .write (varInt >> 8 );
7682 outputStream .write (varInt >> 16 );
@@ -81,19 +87,19 @@ public void encode(Integer data, OutputStream outputStream) throws IOException {
8187 @ Override
8288 public Integer decode (InputStream inputStream ) throws IOException {
8389 int b = inputStream .read ();
84- int result = b & 0x7F ;
85- if ((b & 0x80 ) != 0 ) {
90+ int result = b & VARINT_MASK ;
91+ if ((b & VARINT_CONTINUE_FLAG ) != 0 ) {
8692 b = inputStream .read ();
87- result |= (b & 0x7F ) << 7 ;
88- if ((b & 0x80 ) != 0 ) {
93+ result |= (b & VARINT_MASK ) << VARINT_SHIFT ;
94+ if ((b & VARINT_CONTINUE_FLAG ) != 0 ) {
8995 b = inputStream .read ();
90- result |= (b & 0x7F ) << 14 ;
91- if ((b & 0x80 ) != 0 ) {
96+ result |= (b & VARINT_MASK ) << ( VARINT_SHIFT * 2 ) ;
97+ if ((b & VARINT_CONTINUE_FLAG ) != 0 ) {
9298 b = inputStream .read ();
93- result |= (b & 0x7F ) << 21 ;
94- if ((b & 0x80 ) != 0 ) {
99+ result |= (b & VARINT_MASK ) << ( VARINT_SHIFT * 3 ) ;
100+ if ((b & VARINT_CONTINUE_FLAG ) != 0 ) {
95101 b = inputStream .read ();
96- result |= (b & 0x7F ) << 28 ;
102+ result |= (b & VARINT_MASK ) << ( VARINT_SHIFT * 4 ) ;
97103 }
98104 }
99105 }
0 commit comments