2016-12-02 11 views
1

라이브러리가 존재하기 때문에 BitSet을 사용하여 바이트 []의 비트를 조작 할 계획이었습니다.자바 비트셋 크기() 동작

그러나 바이트 []에서 BitSet을 만든 후 비트 세트의 최소 크기는 64이며, 그렇지 않으면 0이됩니다. 8 바이트가 있어야한다는 요구 사항이 있습니까? 또한 0과 동일한 byte []는 항상 0 크기로 표시됩니다. 바이트 배열의 크기를 여전히 출력한다고 가정했습니다.

즉.

BitSet bs1 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 1}); // bs1.size() == 64 
BitSet bs2 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 1}); // bs2.size() == 64 
BitSet bs3 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 1}); // bs3.size() == 128 
BitSet bs4 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0}); // bs4.size() == 0 
System.out.print(bs1.size() + " " + bs2.size() + " " + bs3.size() + " " + bs4.size()); 

필자는 아마도 내 자신의 기능을 작성하게 될 것이지만, 왜 이런 일이 발생하는지 궁금합니다.

감사합니다.

+0

Javadoc을 읽는 것뿐만 아니라 소스 코드도 쉽게 사용할 수 있습니다. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/BitSet .java -이 구현은 비트를'long' 배열로 저장합니다. 그러나 구현 세부 사항에 의존하기 전에 신중하게 생각하십시오. 문서에 설명 된 동작은 모두 사실임을 보장합니다. – slim

답변

4

은 그냥 자바 독을 읽어

size() : 반환 실제로 사용되는 비트의 수를이 BitSet로 비트 값을 나타냅니다.

설명 : BitSet 사전 할당 공간; 그리고 그것이 size()가 알려주는 것입니다! 그것은 이 아니며은 정확히 얼마나 많은 비트를 넣었는지 알려줍니다!

즉, BitSet은 64 개의 "빈"비트로 시작합니다. 64 개 이상의 값을 요구하는 값을 "입력"하는 즉시; 128 비트의 "할당"으로 이동합니다. 또한 size()는 JDK의 구현 인 BitSet에 따라 다릅니다.

length() resp. valueOf(); 아마 당신의 문제를 해결하는 데 도움이 될 것입니다.

+0

이것은 정답입니다 (Javadoc을 읽으십시오!)하지만'length()'에 대해서도 언급하고 크기가 구현에 종속된다는 것을 인용 할 것을 제안합니다. – slim

+0

size()에 대한 부분을 읽었지만 원래 BitSet 크기와 0이 될 수 없다는 사실을 나타내는 valueOf()에서 javadoc을 읽지 않았습니다. 감사! – eggplant

+0

@eggplant 따라서 내 대답을 업데이 트되었습니다. 문제가 해결되면; 내 대답을 받아 들일 자유롭게 ;-) – GhostCat