如何解决BitSet有时会掉落比特
我目前正在尝试从Java文件中读取一点。
我将数据读入字节数组,然后将字节数组转换为Bitset。
问题在于,转换后的位集中有时会缺少一些位。
在下面的示例中,我有2个字节数组,每个都有25个非常相似的字节。但是其中一个被转换为预期的200位,另一种仅转换为197位,我不知道为什么。
import java.nio.ByteBuffer;
import java.util.BitSet;
public class Main {
public static void main(String[] args) {
ByteBuffer cb = ByteBuffer.wrap(new byte[] {(byte)0x18,(byte)0x8C,(byte)0x18,});
BitSet cBits = BitSet.valueOf(cb);
System.out.println(cBits.length());
ByteBuffer db = ByteBuffer.wrap(new byte[] {(byte)0x17,(byte)0x8c,});
BitSet dBits = BitSet.valueOf(db);
System.out.println(dBits.length());
}
}
解决方法
Java位集的length()是最高有效位的结果,而不是所传递数组的长度。这与对位集的描述是一种根据需要增长的数据结构是一致的-其逻辑大小是位集的结果,而不是某些底层缓冲区的物理容量。
返回此BitSet的“逻辑大小”:BitSet中最高设置位的索引加1。如果BitSet不包含任何设置位,则返回零。
您的第一个示例的最高有效字节为0x18,即二进制00011000。与第二个位集(其最高有效字节为0x8c(10001100))相比,前三个零位造成了差异。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。