Я планировал использовать BitSet для управления битами в байте [], поскольку существует библиотека.Поведение в бите бит Java (
Однако, похоже, что после создания BitSet с байта [] минимальный размер BitSet равен 64, в противном случае он заканчивается нулем. Есть ли требование о том, что должно быть 8 байтов? Кроме того, байт [], эквивалентный нулю, всегда будет отображаться с нулевым размером. Я предположил, что все равно выдаст размер массива байтов?
ie.
BitSet bs1 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 1}); // bs1.size() == 64
BitSet bs2 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 1}); // bs2.size() == 64
BitSet bs3 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 1}); // bs3.size() == 128
BitSet bs4 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0}); // bs4.size() == 0
System.out.print(bs1.size() + " " + bs2.size() + " " + bs3.size() + " " + bs4.size());
Я, вероятно, в конечном итоге напишу свою собственную функцию, но мне любопытно, почему это происходит.
Спасибо!
Помимо чтения Javadoc, исходный код легко доступен: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/BitSet .java - обратите внимание, что эта реализация хранит биты как массив 'long'. Но - тщательно подумайте, прежде чем полагаться на детали реализации. Поведение, описанное в документах, является гарантией того, что оно останется верным. – slim