我会使用查找表。一次抓取 16 位,并在具有 24 位条目的 64K 表中查找它们。
int[] table = new int[65536];
table[0] = 0b100100100100100100100100;
table[1] = 0b100100100100100100100010;
...
table[65535] = 0b001001001001001001001001;
BitSet output = new BitSet();
for (int i = 0; i < length; i += 16) {
int x = (input.get(i) ? 1 : 0)
+ (input.get(i+1) ? 2 : 0)
...
+ (input.get(i+15) ? 32768 : 0);
int y = table[x];
output.set(i/16*24, (y & 1) != 0);
output.set(i/16*24 + 1, ((y>>1) & 1) != 0);
...
output.set(i/16*24 + 23, ((y>>23) & 1) != 0);
}