Java文件操作

时间:2014-05-08 13:59:41

标签: java parsing

我正在使用Java进行任务,我们的讲师为我们提供了示例代码。我无法理解一些代码,所以任何人都可以解释一下吗?

    private long magic;
    private int minor;

    magic = file.readUnsignedShort() << 16 | file.readUnsignedShort();
    mnior = file.readUnsignedShort();

我不明白为什么他会为这两个人使用“readUnsignedShort”,为什么他会添加 “&lt;&lt; 16 | file.readUnsignedShort()”用于魔法。任何帮助将不胜感激

4 个答案:

答案 0 :(得分:4)

short使用16位,int使用32位,long使用64位。 鉴于此,Java中没有无符号值,因此如果最高有效位为1,则表示该值为负。

拆分您拥有的代码:

file.readUnsignedShort()&lt; - 读取16位

<< 16&lt; - 向左移动16个位置“,添加零(就像乘以2 ^ 16)

| file.readUnsignedShort();&lt; - 在这16个零中,使用OR操作读取接下来的16个叮咬,其操作如下:

xxxx0000 | 0000YYYY = xxxxYYYY

答案 1 :(得分:1)

这个操作就像比特一样。

short是16位,整数是32位长。连接2短,你将获得一个整数。

&lt;&lt;运算符代表bitshift,这样你就可以将位移16个位置。

示例:

NUMBER1 1111 1111 1111 1111
NUMBER2 0000 0000 0000 0000

NUMBER1 << 16 | NUMBER2 = 1111 1111 1111 1111  0000 0000 0000 0000

(感谢提示)

答案 2 :(得分:1)

好的,让我们从头开始。

  1. RandomAccessFile.readUnsignedShort()从文件中读取16位信息,而不将其解释为2s complement representation
  2. 因此,在第一行中您执行此操作:<first two bytes of the file> << 16 | <third and fourth bytes of the file>
  3. <<16表示将数字左移16位。对于无符号数,这相当于乘以65536。
  4. |表示按位或按位。因为我们知道第一个数字被移位了,在我们的例子中,这相当于只添加数字。
  5. 所以这就是它的作用,它为什么会这样做是任何人的猜测。你应该真的问你的老师,但我的猜测是,这可能与通过RandomAccessFile读取32位无符号数的唯一方法有关。

答案 3 :(得分:0)

magic = file.readUnsignedShort() << 16 | file.readUnsignedShort();

&LT;&LT;是位移操作

|按位操作。

了解更多here