這是我的代碼。我想要做的是使用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