了解为什么执行某些位操作操作

下面是 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;

    }


慕沐林林
浏览 100回答 1
1回答

烙印99

this.read()大概返回 8 个“有趣”位,因为& 255“检索”仅最后 8 位,将其移动 8 位意味着现在第 9-16 位保存数据。然后执行另一次读取 +&再次获得 8 位,|通过之前步骤的移位位,您现在有一个int设置了 16 个相关位的位:位 1-8 保存第二次读取的结果,而位 9-16 保存位第一次阅读。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java