不知道爲什麼你這樣做,但爲什麼不反轉你的方法?
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;
}
編輯: 因爲它似乎你想解決您的方法,只有我能想到的 迫使字符數組爲特定大小的一種方式,但是你需要知道你要多少個零 追加到最後,所以我改寫了你的方法是這樣的:
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;
}
使用位圖的問題是,它只有商店「One」形成,所以在BitSet中的最後一項將永遠是一個「一「,並且該長度將始終引用BitSet中的最後一個」1「。
例如:
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;
}
}
}
'==「1'',對不對? – 2011-03-23 15:54:13
是的,你是對的 – sharpner 2011-03-23 15:54:59
是的,我肯定會澄清我的觀點:在SQL服務器中存儲位(二進制數據)時,如果二進制值以0開頭而不是1(0之前的所有0被刪除),則會丟失數據。現在,在對數據進行檢索之後,我需要將這些零返回,然後再對其執行一些邏輯操作。因此是轉換爲字符數組並返回。 – JavaBits 2011-03-23 15:58:08