提取自Zxing源码: Zxing源码
package com.wx.zxing.bitArray;
/**
* 用 int 来储存 boolean 数组
*/
public class BitArray {
private int[] bits;
/** size 不是 bits 的大小, 而是被保存的数组大小 */
private int size;
public BitArray() {
this.size = 0;
this.bits = new int[1];
}
public BitArray(int size) {
this.size = 0;
this.bits = new int[(size + 31) / 32];
}
public void encode(boolean bit){
if (bit){
bits[size / 32] |= 1 << (size & 0x1F);
}
size++;
}
public boolean get(int index){
return (bits[index / size] & (1 << (index & 0x1F))) != 0;
}
public int[] getBitArray() {
return bits;
}
public int getSize() {
return size;
}
}
测试代码:
package com.wx.zxing.bitArray;
public class BitArrayTest {
public static void main(String[] args) {
boolean[] array = new boolean[]{false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true};
BitArray bitArray = new BitArray(array.length);
for (int i = 0; i < array.length; i++){
bitArray.encode(array[i]);
}
int[] bits2 = bitArray.getBitArray();
System.out.println("……………………………………");
for (int b : bits2){
System.out.print(b + " ");
}
System.out.println();
for (int i = 0; i < bitArray.getSize(); i++){
System.out.print(bitArray.get(i) + " ");
}
}
}