static long readVarLong(InputStream in) throws IOException {
  long x=in.read();
  if (x < 0) {
    throw new EOFException();
  }
  x=(byte)x;
  if (x >= 0) {
    return x;
  }
  x&=0x7f;
  for (int s=7; s < 64; s+=7) {
    long b=in.read();
    if (b < 0) {
      throw new EOFException();
    }
    b=(byte)b;
    x|=(b & 0x7f) << s;
    if (b >= 0) {
      break;
    }
  }
  return x;
}

static long readVarLong ( InputStream in ) throws IOException { long x = in . read ( ) ; if ( x < 0 ) { throw new EOFException ( ) ; } x = ( byte ) x ; if ( x >= 0 ) { return x ; } x &= 0x7f ; for ( int s = 7 ; s < 64 ; s += 7 ) { long b = in . read ( ) ; if ( b < 0 ) { throw new EOFException ( ) ; } b = ( byte ) b ; x |= ( b & 0x7f ) << s ; if ( b >= 0 ) { break ; } } return x ; }
read a variable size long value .
