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

今天在《大型分布式网站架构设计与实践》(陈康贤著)一书中看到以下一段话,在此先 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;
}
public static byte[] int2ByteArray(int i) {
	byte[] result = new byte[4];
	result[0] = (byte) ((i >> 24) & 0xFF);
	result[1] = (byte) ((i >> 16) & 0xFF);
	result[2] = (byte) ((i >> 8) & 0xFF);
	result[3] = (byte) (i & 0xFF);
	return result;
}


ByteArrayOutputStream:
关于向 OutputStream 中直接写入 int 的细节问题_第1张图片
SocketOutputStream:
关于向 OutputStream 中直接写入 int 的细节问题_第2张图片
关于 Endian: https://baike.baidu.com/item/Endian/10830754?fr=aladdin

你可能感兴趣的:(问题集)