我有bytebuffer
,每次迭代读取8个字节(长),我有一个要比较的位掩码,但是我不确定我的模式应该是什么样子。例如,
private final static long ASCII_125 = 0x7D;
public static boolean isValidPath(
DirectBuffer path)
{
boolean isPathValid = true;
for (int i = 0; i < path.capacity(); i += Long.BYTES)
{
long charsLong = path.getLong(i);
if ((charsLong & result) != xxxxxx(pattern))
{
isPathValid = false;
break;
}
}
return isPathValid;
}
因此,如果charlong为0b01111011_01111011_00100101_00100101_01111011_01111011_01111101_01111101
,并检查在这8个字节中是否存在01111101
个字节。我想我需要找到一种模式,该模式将在逻辑上让我一次检查多个值,为该模式构造一个掩码,然后将掩码一次应用于所有8个字节。但是我在提出模式时遇到了麻烦。
如何这样:
这基本上是通过将长的右移8位并将其屏蔽为一个字节。
for (int i = 0; i < path.capacity(); i += Long.BYTES) {
long charsLong = path.getLong(i);
while(charsLong > 0) {
// get low order byte
byte val = (byte)(charLong&0xFF);
if ((val & result) != xxxxxx(pattern)) {
return false;
}
// right shift thru sign bit by 8 bits
charsLong>>>= 8;
}
}
return true;
注意,如果要检查特定的字节值,则可以将每个字节与结果字节进行比较。但是,如果要检查字节中是否设置了某些位,则需要位掩码。
例如要查看是否设置了较低的101位,请执行以下操作。
byte bitMask = 0b101;
if ((test & bitMask) == bitMask) {
bits are set.
}