@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(); }