ну, не знаю, почему вы это делаете, но почему бы не изменить свой метод?
private static BitSet toBitset(final char[] entries){
final int length = entries.length;
BitSet bs = new BitSet(length);
for(int i = 0; i < length; i++){
bs.set(i, entries[i] == '1');
}
return bs;
}
Редактировать: Поскольку кажется, что вы хотели исправить свой метод, есть только один способ заставить его заставитьмассив char определенного размера, но вам нужно знать, сколько нулей вы хотите добавить в конец, поэтому я переписал ваш метод следующим образом:
private static char[] toCharArray(final BitSet bs, int expectedBits){
if(expectedBits < bs.length()){
expectedBits = bs.length();
}
final char[] arr = new char[expectedBits];
for(int i = 0; i < expectedBits; i++){
arr[i] = bs.get(i) ? '1' : '0';
}
return arr;
}
Проблема с использованием растрового изображения, это толькохранит «один», поэтому последняя запись в BitSet всегда будет «один», а длина всегда будет ссылаться на последний «один» в BitSet.
Например:
BitSet bs = new BitSet();
for(int i = 0; i < 1000; i++){
bs.set(i, false);
}
System.out.println(bs.length());
Распечатывает «0», тогда как
BitSet bs = new BitSet();
bs.set(10001, true);
System.out.println(bs.length());
выводит 10002.
Это может помочь вам (но вам необходимо соответствующим образом отредактировать приведенные выше методы):
class FixedBitSet extends BitSet {
private int maxLength = 0;
public int maxLength(){
return maxLength;
}
@Override
public void set(int bitIndex, boolean value) {
super.set(bitIndex, value);
if(bitIndex > maxLength){
maxLength = bitIndex;
}
}
}