来自byte []的BitSet,具有奇怪的长度

时间:2016-02-14 18:17:26

标签: java bitset

我的代码是:

String blah = "blah";
byte[] blahBytes = blah.getBytes("US-ASCII");
System.out.println(Arrays.toString(blahBytes));
BitSet set = BitSet.valueOf(blahBytes);
System.out.println(set.length());

输出是:

[98, 108, 97, 104]
31

为什么length()返回31?不应该是32?

1 个答案:

答案 0 :(得分:2)

位设置长度由设置为1的最高位的位置决定。由于传递给构造位集的所有字节都表示UNICODE的ASCII字符子集,因此第8位始终为零。因此,设置为1的最高位将是位30或位31,具体取决于字符串末尾的字母或数字:如果您通过"bla1"而不是"blah",则会得到30(demo 1)。如果您使用控制字符,例如<TAB>,则可以获得更短的28位(demo 2)。

如果您希望将长度四舍五入到8的下一个倍数,请使用

int roundedLength = 8 * ((set.length() + 7) / 8);

demo 3