关于向 OutputStream 中直接写入 int 的细节问题

在Java的OutputStream中直接写入int类型数据时,系统仅保留低8位,丢弃高24位。由于Java使用Big Endian字节序,与网络协议一致,因此在数据传输前需将int转换为Big Endian字节流,接收时反之进行转换。
摘要由CSDN通过智能技术生成
今天在《大型分布式网站架构设计与实践》(陈康贤著)一书中看到以下一段话,在此先 mark 一下:

“OutputStream 中直接写入一个 int 类型,会截取其低 8 位,丢弃其高 24 位,因此,需要将基本类型先转换为字节流。Java 采用的是 Big Endian 字节序。无独有偶,所有的网络协议也都是采用 Big Endian 字节序来进行传输的。因此,我们在进行数据的传输时,需要先将其转换成 Big Endian 字节序;同理,在数据接收时,也需要进行相应的转换”。

public static int bytes2Int(byte[] bytes) {
	int num = bytes[3] & 0xFF;
	num |= ((bytes[2] << 8) & 0xFF00);
	num |=((bytes[1] << 16) & 0xFF0000);
	num |=((bytes[0] << 24) & 0xFF000000);
	return num;
}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值