(博彩导航网站排行榜) DataOutputSteam的writeInt为什么要这么实现呢?
博彩导航网站排行榜
博彩导航网站排行榜
当前位置 : 博彩导航网站排行榜 > 博彩导航网站排行榜

(博彩导航网站排行榜) DataOutputSteam的writeInt为什么要这么实现呢?

看thingking in java的IO部分时提到了DataOutputSteam, 于是查看了一下源码, 发现DataOutputStream在实现writeLong, writeInt ,writeChar和writeShort都采用了这种方法实现:

public final void writeCharint v throws IOException {
    out.writev >>> 8 & 0xFF;
    out.writev >>> 0 & 0xFF;
    incCount2;
}

public final void writeIntint v throws IOException {
    out.writev >>> 24 & 0xFF;
    out.writev >>> 16 & 0xFF;
    out.writev >>>  8 & 0xFF;
    out.writev >>>  0 & 0xFF;
    incCount4;
}

public final void writeLonglong v throws IOException {
    writeBuffer[0] = bytev >>> 56;
    writeBuffer[1] = bytev >>> 48;
    writeBuffer[2] = bytev >>> 40;
    writeBuffer[3] = bytev >>> 32;
    writeBuffer[4] = bytev >>> 24;
    writeBuffer[5] = bytev >>> 16;
    writeBuffer[6] = bytev >>>  8;
    writeBuffer[7] = bytev >>>  0;
    out.writewriteBuffer, 0, 8;
    incCount8;
}

我想知道的是为什么要先无符号右移,然后和00ff进行与运算呢?

首先 >>> 是无符号右移,右移过程中左侧只填充 0 ,和符号位无关。
这里代码这样写,应该是为了保障代码的可读性,表示实际写入的是右移后的其中八位。在 write 方法中,已经保障了只写入低八位,所以这段 & 0xFF 的运算和用 >>> 还是 >> 其实是无关紧要的。不过就像复杂的表达式即使没有必要使用括号,也最好使用括号的道理一样,这里应该是为了方便阅读者不误解实际操作的意义。

最新文章

广告位

博彩导航网站排行榜