您的位置:首页 > 编程语言 > PHP开发

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

2017-10-23 15:39 316 查看
今天在《大型分布式网站架构设计与实践》(陈康贤著)一书中看到以下一段话,在此先 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:



SocketOutputStream:



关于 Endian:https://baike.baidu.com/item/Endian/10830754?fr=aladdin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: