private static int decodeULE128 ( InputStream in ) throws IOException { in . mark ( 5 ) ; int result = 0 ; int shift = 0 ; while ( shift < 32 ) { if ( in . available ( ) == 0 ) { // Buffer does not contain entire integer, // reset reader index and return -1. in . reset ( ) ; return - 1 ; } byte b = ( byte ) in . read ( ) ; if ( shift == 28 && ( b & 0xF8 ) != 0 ) { break ; } result |= ( b & 0x7F ) << shift ; if ( ( b & 0x80 ) == 0 ) { return result ; } shift += 7 ; } // Value exceeds Integer.MAX_VALUE in . reset ( ) ; throw DECOMPRESSION_EXCEPTION ; }
Unsigned Little Endian Base 128 Variable - Length Integer Encoding