从BitSet转换为Byte数组

| 我已经选择了将BitSet转换为Byte数组的示例。
public static byte[] toByteArray(BitSet bits) {
    byte[] bytes = new byte[bits.length()/8+1];
    for (int i=0; i<bits.length(); i++) {
        if (bits.get(i)) {
            bytes[bytes.length-i/8-1] |= 1<<(i%8);
        }
    }
    return bytes;
}
但是在讨论论坛中,我看到通过这种方法,我们将无法获得所有信息,因为每次计算将丢失一位。这是真的?我们需要修改上述方法吗?     
已邀请:
        不,没关系。对帖子的评论与帖子中的另一段代码有关,从字节数组转换为“ 1”。诚然,我会使用更多的空格。 同样,这最终可能会得到比所需长度更长的数组。数组创建表达式可以是:
byte[] bytes = new byte[(bits.length() + 7) / 8];
这为需要的位数提供了空间,但不再增加。基本上相当于“除以8,但总是四舍五入。”     
        如果由于字节顺序问题而需要按相反顺序使用BitSet,请更改:   bytes [bytes.length-i / 8-1] | = 1 <<(i%8); 至:   字节[i / 8] | = 1 <<(7-i%8);     
        这对我来说很好。如果您使用的是Java 1.7,则它具有方法
toByteArray()
。     
        仅供参考,使用
bits.length()
获取位集的大小可能会返回错误的结果;我不得不修改原始示例以利用size()方法来获取已定义的位集大小(而length()返回所设置的位数)。有关更多信息,请参见下面的线程。 java.util.BitSet-set()不能按预期工作     

要回复问题请先登录注册