我正在使用Java通过套接字连接发送byte[]
数组。
我有一个相当长的boolean[]
数组,其中array.length % 8 == 0
。
我想将这个boolean[]
数组转换成一个元素数量少8倍的byte[]
数组,以便我可以将byte[]
发送到套接字连接上。
boolean[]
数组看起来像这样:01011010 10101010 01100011 11001010
等等。
在这种情况下,byte[]
应该像这样:0x5A 0xAA 0x63 0xCA
。
我在另一个问题中找到了一些代码来将单个byte
转换为boolean[]
数组,并添加了一个新方法来在此处将整个数组转换:
public static boolean[] booleanArrayFromByteArray(byte[] x) {
boolean[] y = new boolean[x.length * 8];
int position = 0;
for(byte z : x) {
boolean[] temp = booleanArrayFromByte(z);
System.arraycopy(temp, 0, y, position, 8);
position += 8;
}
return y;
}
public static boolean[] booleanArrayFromByte(byte x) {
boolean bs[] = new boolean[4];
bs[0] = ((x & 0x01) != 0);
bs[1] = ((x & 0x02) != 0);
bs[2] = ((x & 0x04) != 0);
bs[3] = ((x & 0x08) != 0);
return bs;
}
我想知道是否有更有效的方法来完成这个任务。
编辑:谢谢。
x.length / 8
字节的数组,并使用for
循环和|=
适当地填充它们。 - The Paramagnetic CroissantbooleanArrayFromByte(byte)
只返回 4 位? - Elliott Frisch