这是我的代码。我想要做的是使用BitSet处理来自我的ByteBuffer的字节。字节缓冲区从DynamoDB加载(随着DynamoDBMapper)为什么我的BitSet的大小为0?
ByteBuffer buffer = .......
System.out.println("Array length is " + buffer.array().length);
BitSet bitSet = BitSet.valueOf(buffer.array());
System.out.println("Bit set size is " + bitSet.size());
当我执行我的代码,我看到我的ByteBuffer的阵列长度为6100,这意味着它是由6100个字节支持。这些字节全部为0。但是我也看到位集大小是0.这对我来说没有意义(大小应该是6100 * 8)。
我查看了valueOf的文档以及“返回包含给定字节数组中所有位的新位集”的说明。对于我想要做的事情是有意义的。
我犯的第一个错误是使用位集的长度。长度为0,这是合理的,因为所有的位都是0。大小函数“返回此BitSet实际使用的空间位数,以表示位值。”尺寸函数不应该在这里返回6100 * 8吗?
更新:我只是试图把全1到字节缓冲区,现在我得到的7000数组长度和7232
那么你会推荐处理bytebuffer并使用位操作呢? – committedandroider
@committedandroider,我认为这取决于你的具体需求。您当然可以编写自己的逻辑来直接在“ByteBuffer”内计算正确的偏移量,并测试某个位是关闭还是打开。但是,如果您需要将这些数据长时间保存在内存中,并且数据集很大,那么'BitSet'的更紧凑表示可能有助于减少应用程序的内存占用量。 –
“相反,它在内部维护着足够的缓冲空间来跟踪最高位”。我读过这个,但有6100字节(全0),它怎么可能有0的大小? – committedandroider