大数据Java基础(一)int型与byte型数组的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⼤数据Java基础(⼀)int型与byte型数组的转换
int型与byte型数组的转换
为了在接下来的篇章中讲解⽤Java实现⽂件的归档和解归档,需要先了解⼀下Java中int型与byte型数组之间的相互转换。
⾸先,我们先来看看int型转换成byte型数组。
我们知道,Java中,⼀个int型占⽤4个字节,⼀个byte型占⽤1个字节,所以,对于⼀个int型,我们需要⼀个长度为4的byte型数组来对其进⾏存储。
31位——24位23位——16位15位——8位7位——0位
⼀个int型的4个字节如上图所⽰,假设⽤来存储的字节数组为bytes[],那么,我们可以⽤bytes[0]存储int型的第⼀个字节(7位——0位),bytes[1]存储int型的第⼆个字节(15位——8位),bytes[2]存储int型的第三个字节(23位——16位),bytes[3]存储int型的第四个字节(31位——24位)。
具体代码如下:
1public static byte[] int2Bytes(int integer)
2 {
3byte[] bytes=new byte[4];
4 bytes[3]=(byte) integer>>24;
5 bytes[2]=(byte) integer>>16;
6 bytes[1]=(byte) integer>>8;
7 bytes[0]=(byte) integer;
8
9return bytes;
10 }
这⾥需要注意的是,当你将⼀个int型强制类型转换为byte型的时候,最⾼的三个字节会被砍掉,只留下最低的8位赋值给byte型。
接下来,我们来看⼀下byte型数组转换成int型。
我们知道,计算机是以补码的形式存放数值型数据,当我们对⼀个byte型进⾏移位操作的时候,这个byte型会先⾃动补全到32位(即⼀个int型),再进⾏移位操作。
举个例⼦:⼀个byte型的-1,在内存中的补码是⼋个1:11111111,当我们进⾏移位时,(⽐如说左移8位),它会进⾏补全,⽽且是有符号位的补全,再左移8位,所以最后结果是:11111111 11111111 11111111 00000000,但我们因为最后在将byte型数组转换成int型的时候,需要对数组元素使⽤按位或( | )操作,因此,移位结果前⾯的符号位如果不去除,将影响我们的运算,得出⼀个错误的结果。
(上例中我们左移8位,需要将11111111 11111111 11111111 00000000去掉前⾯的那些1,只保留次低位上的1,即为:0000000000000000 11111111 00000000)。
我们可以先将byte数据元素与0xff(⼆进制的00000000 00000000 00000000 11111111)进⾏按位与运算( & ),再进⾏移位,来去除前⾯的符号位。
byte型数组转换成int型的代码如下:
1public static int bytes2Int(byte[] bytes )
2 {
3//如果不与0xff进⾏按位与操作,转换结果将出错,有兴趣的同学可以试⼀下。
4int int1=bytes[0]&0xff;
5int int2=(bytes[1]&0xff)<<8;
6int int3=(bytes[2]&0xff)<<16;
7int int4=(bytes[3]&0xff)<<24;
8
9return int1|int2|int3|int4;
10 }。