code: protected int unsigned8(final int size) throws IOException {
          requireValidSizeUnsigned8(size);
          if (available == 0) {
              octet = read();
              count++;
              available = Byte.SIZE;
          }
          final int required = size - available;
          if (required > 0) {
              return (unsigned8(available) << required) | unsigned8(required);
          }
          return (octet >> (available -= size)) & ((1 << size) - 1);
      }
docs: Reads an unsigned value whose maximum size is {@value Byte#SIZE}.
  
  @param size the number of bits for the value; between {@code 1} and {@value Byte#SIZE}, both inclusive.
  @return an unsigned byte value.
  @throws IOException if an I/O error occurs.