hpack/src/main/java/com/twitter/hpack/Decoder.java
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;
  }
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;
  }
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
Unsigned Little Endian Base 128 Variable - Length Integer Encoding