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