С BitSet # toByteArray () javadoc :
Возвращает новый байтовый массив, содержащий все биты в этом наборе битов.Точнее, если ..
byte[] bytes = s.toByteArray();
, то
bytes.length == (s.length()+7)/8
и
s.get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
для всех n < 8 * bytes.length
.
@ возвращает байтовый массив, содержащий представление с прямым порядком байтов всех битов в этом наборе битов
@, начиная с 1,7
Внимание: toByteArray()
даже не претендует на то, что знает size()
, это только "надежно" в отношении length()
!
.. Поэтому я бы предложилв качестве реализации (альтернатива для вашего toBinaryString()
) метод, подобный:
static String toBinaryString(byte[] barr, int size) {
StringBuilder sb = new StringBuilder();
int i = 0;
for (; i < 8 * barr.length; i++) {
sb.append(((barr[i / 8] & (1 << (i % 8))) != 0) ? '1' : '0');
}
for (; i < size; i++) {
sb.append('0');
}
return sb.toString();
}
.. для вызова как:
System.out.println(toBinaryString(bitSet.toByteArray(), 64);
run:
0111111101111111011111100000000000000000000000000000000000000000
0111111101111111011111100000000000000000000000000000000000000000
BUILD SUCCESSFUL (total time: 0 seconds)