value: 64, 128, 256, 512, 1024 ...
index: 0, 1, 2, 3, 4 ...
minBufferSize: 64
int index = (bufferSize <= minBufferSize) ? 0 : getIndex(bufferSize);
private int indexOffset;
...
indexOffset = getPowerOfTwo(minBufferSize);
...
private int getIndex(int value) {
if (value < 1)
value = minBufferSize;
if (!isPowerOfTwo(value)) {
value--;
value |= value >> 1;
value |= value >> 2;
value |= value >> 4;
value |= value >> 8;
value |= value >> 16;
value++;
}
return getPowerOfTwo(value) - indexOffset;
}
public static int getPowerOfTwo(int value) {
//if (value <= 0 || (value & (value - 1)) != 0) {
// return -1;
//}
return Integer.numberOfTrailingZeros(value);
}
public static boolean isPowerOfTwo(int number) {
return (number & (number - 1)) == 0;
}
'java' 카테고리의 다른 글
java google protobuf ByteBuffer 사용 (0) | 2025.03.17 |
---|---|
java jsckson2 라이브러리 사용 null and default value ignore (2) | 2024.10.08 |
spring boot 가상 스레드로 웹소켓 사용 (0) | 2024.07.20 |
java time ticks (0) | 2024.07.05 |
java drawing random (1) | 2024.07.05 |