了解为什么执行某些位操作操作
Understanding why certain bit manipulation operations are performed
下面是Java中Keytab实现的源代码。此片段从密钥表文件中读取密钥版本。我无法理解这是如何工作的。
为什么要进行按位与和左移操作?
我的代码调用了什么:
KeyTab keytab = KeyTab.getInstance(keytabFile); // passing keytab file location.
此文件为二进制格式。 KeyTabInputStream 读取数据。
private void load(KeyTabInputStream var1) throws IOException, RealmException {
this.entries.clear();
**this.kt_vno = var1.readVersion();**
if (this.kt_vno == 1281) {
var1.setNativeByteOrder();
}
boolean var2 = false;
while(var1.available() > 0) {
int var4 = var1.readEntryLength();
KeyTabEntry var3 = var1.readEntry(var4, this.kt_vno);
if (DEBUG) {
System.out.println(">>> KeyTab: load() entry length: " + var4 + "; type: " + (var3 != null ? var3.keyType : 0));
}
if (var3 != null) {
this.entries.addElement(var3);
}
}
}
public int readVersion() throws IOException {
int var1 = (this.read() & 255) << 8;
return var1 | this.read() & 255;
}
this.read()
大概 returns 8 "interesting" 位,因为 & 255
"retrieves" 只有最后 8 位,将其移动 8 位意味着现在这些位9-16持有数据。
然后执行另一次读取 + &
再次获得 8 位,|
与之前步骤中的移位位你现在有一个 int
设置了 16 个相关位:第 1-8 位保持第二次读取的结果,而位 9-16 保留第一次读取的位。
下面是Java中Keytab实现的源代码。此片段从密钥表文件中读取密钥版本。我无法理解这是如何工作的。 为什么要进行按位与和左移操作?
我的代码调用了什么:
KeyTab keytab = KeyTab.getInstance(keytabFile); // passing keytab file location.
此文件为二进制格式。 KeyTabInputStream 读取数据。
private void load(KeyTabInputStream var1) throws IOException, RealmException {
this.entries.clear();
**this.kt_vno = var1.readVersion();**
if (this.kt_vno == 1281) {
var1.setNativeByteOrder();
}
boolean var2 = false;
while(var1.available() > 0) {
int var4 = var1.readEntryLength();
KeyTabEntry var3 = var1.readEntry(var4, this.kt_vno);
if (DEBUG) {
System.out.println(">>> KeyTab: load() entry length: " + var4 + "; type: " + (var3 != null ? var3.keyType : 0));
}
if (var3 != null) {
this.entries.addElement(var3);
}
}
}
public int readVersion() throws IOException {
int var1 = (this.read() & 255) << 8;
return var1 | this.read() & 255;
}
this.read()
大概 returns 8 "interesting" 位,因为 & 255
"retrieves" 只有最后 8 位,将其移动 8 位意味着现在这些位9-16持有数据。
然后执行另一次读取 + &
再次获得 8 位,|
与之前步骤中的移位位你现在有一个 int
设置了 16 个相关位:第 1-8 位保持第二次读取的结果,而位 9-16 保留第一次读取的位。