在OutputStream中写入一个int类型,会截取其低8位,丢弃其高24位,因此,需要将基本类型先转换为字节流。
将int数字转换为字节流
1 /** 2 * int转byte[] 3 * 该方法将一个int类型的数据转换为byte[]形式,因为int为32bit,而byte为8bit所以在进行类型转换时,知会获取低8位, 4 * 丢弃高24位。通过位移的方式,将32bit的数据转换成4个8bit的数据。注意 &0xff,在这当中,&0xff简单理解为一把剪刀, 5 * 将想要获取的8位数据截取出来。 6 * @param i 一个int数字 7 * @return byte[] 8 */ 9 public static byte[] int2ByteArray(int i){ 10 byte[] result=new byte[4]; 11 result[0]=(byte)((i >> 24)& 0xFF); 12 result[1]=(byte)((i >> 16)& 0xFF); 13 result[2]=(byte)((i >> 8)& 0xFF); 14 result[3]=(byte)(i & 0xFF); 15 return result; 16 } 17 /** 18 * byte[]转int 19 * 利用int2ByteArray方法,将一个int转为byte[],但在解析时,需要将数据还原。同样使用移位的方式,将适当的位数进行还原, 20 * 0xFF为16进制的数据,所以在其后每加上一位,就相当于二进制加上4位。同时,使用|=号拼接数据,将其还原成最终的int数据 21 * @param bytes byte类型数组 22 * @return int数字 23 */ 24 public static int bytes2Int(byte[] bytes){ 25 int num=bytes[3] & 0xFF; 26 num |=((bytes[2] <<8)& 0xFF00); 27 num |=((bytes[1] <<16)& 0xFF0000); 28 num |=((bytes[0] <<24)& 0xFF0000); 29 return num; 30 }