2016-12-02 14 views
1

Я планировал использовать 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()); 

Я, вероятно, в конечном итоге напишу свою собственную функцию, но мне любопытно, почему это происходит.

Спасибо!

+0

Помимо чтения Javadoc, исходный код легко доступен: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/BitSet .java - обратите внимание, что эта реализация хранит биты как массив 'long'. Но - тщательно подумайте, прежде чем полагаться на детали реализации. Поведение, описанное в документах, является гарантией того, что оно останется верным. – slim

ответ

4

Просто прочитайте документацию:

size(): Возвращает количество битов пространства фактически используемого этим BitSet для представления битовых значений.

Вещь: битсет предустановляет пространство; и вот какой размер() говорит вам! Это не расскажите, сколько бит именно вы «положили» в него!

Другими словами: битсет начинается с 64 «пустых» битов; и как только вы «положите» значение, которое требует больше, чем 64; вы переходите к 128 бит «распределения». Также обратите внимание, что размер() зависит от реализации вашего JDK BitSet.

Возможно, вы захотите изучить length() resp. valueOf(); вероятно, это поможет вам решить вашу проблему.

+0

Это правильный ответ (прочтите Javadoc!), Но я также предлагаю указать «length()» и цитирование части о размере, зависящем от реализации. – slim

+0

Я прочитал часть about size(), однако я не читал javadoc о valueOf(), который показывает исходный размер BitSet и тот факт, что он не может быть равен нулю. Благодаря! – eggplant

+0

@eggplant Обновлен мой ответ соответственно. Если ваша проблема решена; не стесняйтесь принять мой ответ, тогда ;-) – GhostCat