You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中DataOutputStream的writeInt方法里>>>和&位运算符的作用是什么?

解析DataOutputStream.writeInt()的底层实现逻辑

DataOutputStream.writeInt()的核心作用是将一个32位的Java int值,拆分为4个独立的8位字节,按照**大端字节序(高位字节优先)**写入输出流,以此保证跨平台的数据一致性——无论读取端是什么系统,都能通过DataInputStream.readInt()正确还原出原始int值。

下面结合你示例中的数字4,逐行拆解源码的位操作逻辑:

先明确前提

Java中int是32位有符号整数,数字4的二进制完整表示为:

00000000 00000000 00000000 00000100

我们把这32位从左到右分为4个8位字节:最高有效字节、次高有效字节、次低有效字节、最低有效字节。


1. (v >>> 24) & 0xFF

  • >>>是无符号右移运算符:将v的所有32位向右移动24位,此时原来的最高8位(第一个字节)会被移到最低8位的位置。对于v=4,右移24位后结果是00000000(二进制)。
  • & 0xFF:用十六进制的0xFF(即二进制11111111)与结果做按位与,目的是清零所有高位,只保留低8位,确保最终得到一个0-255范围内的无符号字节值。
  • 最终得到:0x00(十六进制),对应4的最高有效字节。

2. (v >>> 16) & 0xFF

  • 右移16位:将v的所有位向右移动16位,原来的次高8位(第二个字节)移到最低位。4右移16位后仍为00000000。
  • 与0xFF相与后得到:0x00,对应4的次高有效字节。

3. (v >>> 8) & 0xFF

  • 右移8位:将v的所有位向右移动8位,原来的次低8位(第三个字节)移到最低位。4右移8位后还是00000000。
  • 与0xFF相与后得到:0x00,对应4的次低有效字节。

4. (v >>> 0) & 0xFF

  • 右移0位等于没有位移,直接取v的最低8位。4的低8位是00000100,与0xFF相与后得到十进制的4,即十六进制0x04,对应4的最低有效字节。

实际写入结果

当你调用writeInt(4)时,输出流中会依次写入四个字节:0x00, 0x00, 0x00, 0x04,这就是你用二进制编辑器打开test_file.txt能看到的内容。

关于incCount(4)

这个方法的作用是更新DataOutputStream内部的字节计数器,将已写入的总字节数增加4——因为writeInt()固定写入4个字节,方便后续通过size()方法获取已写入的总字节数。

内容的提问来源于stack exchange,提问作者Ken Masters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:40:21