@Override
  public int encodedSize() {
    /*
     * The number of bytes goes as follows:
     *
     * you need at least as many bits as the highest 1-bit in the bitSet(equivalent
     *  to bitSet.length()). Because each set bit will have an additional 2-bit "type delimiter"
     *  set afterwords, we need to have 3 bits for every set bit, but 1 for every non-set bit
     *
     * This is equivalent to length()+2*numSetBits().
     *
     * we have 4 available bits in the header, and 7 bits in each subsequent byte (we use a continuation
     * bit).
     */
    int numBits = (int) (bitSet.length() + 2 * bitSet.cardinality());
    int numBytes = 1;
    numBits -= 4;
    if (numBits > 0) {
      numBytes += numBits / 7;
      if (numBits % 7 != 0) numBytes++;
    }

    return numBytes;
  }
 @Override
 public int length() {
   return (int) bitSet.length();
 }