gpt4 book ai didi

java - BitSet 有时会丢弃 Bits

转载 作者:行者123 更新时间:2023-12-04 09:08:21 25 4
gpt4 key购买 nike

我目前正在尝试从 Java 文件中读取一个位。
我将数据读入字节数组,然后将字节数组转换为 Bitset。
问题是有时在转换后的 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,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,});
BitSet cBits = BitSet.valueOf(cb);
System.out.println(cBits.length());
ByteBuffer db = ByteBuffer.wrap(new byte[] {(byte)0x17,(byte)0x8c,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x18,(byte)0x8c,(byte)0x8c,});
BitSet dBits = BitSet.valueOf(db);
System.out.println(dBits.length());
}
}
Doodle

最佳答案

Java 位集的 length() 是最重要的设置位的结果,而不是传递的数组的长度。这与 bitset 描述为一种根据需要增长的数据结构是一致的——它的逻辑大小是其设置位的结果,而不是某些底层缓冲区的物理容量。

Returns the "logical size" of this BitSet: the index of the highest set bit in the BitSet plus one. Returns zero if the BitSet contains no set bits.


您的第一个示例的最高有效字节为 0x18,或二进制 00011000。与第二个 bitset 相比,前三个零位解释了差异,第二个 bitset 的最高有效字节为 0x8c (10001100)

关于java - BitSet 有时会丢弃 Bits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63404762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com