java处理字节的常用工具类
处理字节的常用工具类方法,供大家参考,具体内容如下
packagecom.demo.utils; importjava.io.ByteArrayInputStream; importjava.io.ByteArrayOutputStream; importjava.io.IOException; importjava.io.ObjectInputStream; importjava.io.ObjectOutputStream; importjava.nio.charset.Charset; importjava.util.Arrays; /** *处理字节的常用工具类方法 *@authordongyangyang *@Date2017/3/1312:31 *@Version1.0 * */ publicclassByteUtils{ /** *构造新字节时需要与的值表 */ privatestaticfinalbyte[]BUILD_BYTE_TABLE=newbyte[]{(byte)128,(byte)64,(byte)32,(byte)16,(byte)8,(byte)4,(byte)2,(byte)1}; privateByteUtils(){} /** *short转换到字节数组 * *@paramnumber *需要转换的数据。 *@return转换后的字节数组。 */ publicstaticbyte[]shortToByte(shortnumber){ byte[]b=newbyte[2]; for(inti=1;i>=0;i--){ b[i]=(byte)(number%256); number>>=8; } returnb; } /** *字节到short转换 * *@paramb *short的字节数组 *@returnshort数值。 */ publicstaticshortbyteToShort(byte[]b){ return(short)((((b[0]&0xff)<<8)|b[1]&0xff)); } /** *整型转换到字节数组 * *@paramnumber *整形数据。 *@return整形数据的字节数组。 */ publicstaticbyte[]intToByte(intnumber){ byte[]b=newbyte[4]; for(inti=3;i>=0;i--){ b[i]=(byte)(number%256); number>>=8; } returnb; } /** *字节数组到整型转换 * *@paramb *整形数据的字节数组。 *@return字节数组转换成的整形数据。 */ publicstaticintbyteToInt(byte[]b){ return((((b[0]&0xff)<<24)|((b[1]&0xff)<<16)|((b[2]&0xff)<<8)|(b[3]&0xff))); } /** *long转换到字节数组 * *@paramnumber *长整形数据。 *@return长整形转换成的字节数组。 */ publicstaticbyte[]longToByte(longnumber){ byte[]b=newbyte[8]; for(inti=7;i>=0;i--){ b[i]=(byte)(number%256); number>>=8; } returnb; } /** *字节数组到整型的转换 * *@paramb *长整形字节数组。 *@return长整形数据。 */ publicstaticlongbyteToLong(byte[]b){ return((((long)b[0]&0xff)<<56)|(((long)b[1]&0xff)<<48)|(((long)b[2]&0xff)<<40)|(((long)b[3]&0xff)<<32)|(((long)b[4]&0xff)<<24) |(((long)b[5]&0xff)<<16)|(((long)b[6]&0xff)<<8)|((long)b[7]&0xff)); } /** *double转换到字节数组 * *@paramd *双精度浮点。 *@return双精度浮点的字节数组。 */ publicstaticbyte[]doubleToByte(doubled){ byte[]bytes=newbyte[8]; longl=Double.doubleToLongBits(d); for(inti=0;i>8; } returnbytes; } /** *字节数组到double转换 * *@paramb *双精度浮点字节数组。 *@return双精度浮点数据。 */ publicstaticdoublebyteToDouble(byte[]b){ longl; l=b[0]; l&=0xff; l|=((long)b[1]<<8); l&=0xffff; l|=((long)b[2]<<16); l&=0xffffff; l|=((long)b[3]<<24); l&=0xffffffffl; l|=((long)b[4]<<32); l&=0xffffffffffl; l|=((long)b[5]<<40); l&=0xffffffffffffl; l|=((long)b[6]<<48); l&=0xffffffffffffffl; l|=((long)b[7]<<56); returnDouble.longBitsToDouble(l); } /** *float转换到字节数组 * *@paramd *浮点型数据。 *@return浮点型数据转换后的字节数组。 */ publicstaticbyte[]floatToByte(floatd){ byte[]bytes=newbyte[4]; intl=Float.floatToIntBits(d); for(inti=0;i >8; } returnbytes; } /** *字节数组到float的转换 * *@paramb *浮点型数据字节数组。 *@return浮点型数据。 */ publicstaticfloatbyteToFloat(byte[]b){ intl; l=b[0]; l&=0xff; l|=((long)b[1]<<8); l&=0xffff; l|=((long)b[2]<<16); l&=0xffffff; l|=((long)b[3]<<24); l&=0xffffffffl; returnFloat.intBitsToFloat(l); } /** *字符串到字节数组转换 * *@params *字符串。 *@paramcharset *字符编码 *@return字符串按相应字符编码编码后的字节数组。 */ publicstaticbyte[]stringToByte(Strings,Charsetcharset){ returns.getBytes(charset); } /** *字节数组带字符串的转换 * *@paramb *字符串按指定编码转换的字节数组。 *@paramcharset *字符编码。 *@return字符串。 */ publicstaticStringbyteToString(byte[]b,Charsetcharset){ returnnewString(b,charset); } /** *对象转换成字节数组。 * *@paramobj *字节数组。 *@return对象实例相应的序列化后的字节数组。 *@throwsIOException */ publicstaticbyte[]objectToByte(Objectobj)throwsIOException{ ByteArrayOutputStreambuff=newByteArrayOutputStream(); ObjectOutputStreamout=newObjectOutputStream(buff); out.writeObject(obj); try{ returnbuff.toByteArray(); }finally{ out.close(); } } /** *序死化字节数组转换成实际对象。 * *@paramb *字节数组。 *@return对象。 *@throwsIOException *@throwsClassNotFoundException */ publicstaticObjectbyteToObject(byte[]b)throwsIOException,ClassNotFoundException{ ByteArrayInputStreambuff=newByteArrayInputStream(b); ObjectInputStreamin=newObjectInputStream(buff); Objectobj=in.readObject(); try{ returnobj; }finally{ in.close(); } } /** *比较两个字节的每一个bit位是否相等. * *@parama *比较的字节. *@paramb *比较的字节 *@returnture两个字节每一位都相等,false有至少一位不相等. */ publicstaticbooleanequalsBit(bytea,byteb){ returnArrays.equals(byteToBitArray(a),byteToBitArray(b)); } /** *比较两个数组中的每一个字节,两个字节必须二进制字节码每一位都相同才表示两个byte相同. * *@parama *比较的字节数组. *@paramb *被比较的字节数. *@returnture每一个元素的每一位两个数组都是相等的,false至少有一位不相等. */ publicstaticbooleanequalsBit(byte[]a,byte[]b){ if(a==b){ returntrue; } if(a==null||b==null){ returnfalse; } intlength=a.length; if(b.length!=length){ returnfalse; } for(intcount=0;count =0;i--){ buff[index++]=((b>>>i)&1)==1; } returnbuff; } /** *返回指定字节中指定bit位,true为1,false为0.指定的位从0-7,超出将抛出数据越界异常. * *@paramb *需要判断的字节. *@paramindex *字节中指定位. *@return指定位的值. */ publicstaticbooleanbyteBitValue(byteb,intindex){ returnbyteToBitArray(b)[index]; } /** *根据布尔数组表示的二进制构造一个新的字节. * *@paramvalues *布尔数组,其中true表示为1,false表示为0. *@return构造的新字节. */ publicstaticbytebuildNewByte(boolean[]values){ byteb=0; for(inti=0;i<8;i++){ if(values[i]){ b|=BUILD_BYTE_TABLE[i]; } } returnb; } /** *将指定字节中的某个bit位替换成指定的值,true代表1,false代表0. * *@paramb *需要被替换的字节. *@paramindex *位的序号,从0开始.超过7将抛出越界异常. *@paramnewValue *新的值. *@return替换好某个位值的新字节. */ publicstaticbytechangeByteBitValue(byteb,intindex,booleannewValue){ boolean[]bitValues=byteToBitArray(b); bitValues[index]=newValue; returnbuildNewByte(bitValues); } /** *将指定的IP地址转换成字节表示方式.IP数组的每一个数字都不能大于255,否则将抛出IllegalArgumentException异常. * *@paramipNums *IP地址数组. *@returnIP地址字节表示方式. */ publicstaticbyte[]ipAddressBytes(Stringaddress){ if(address==null||address.length()<0||address.length()>15){ thrownewIllegalArgumentException("InvalidIPaddress."); } finalintipSize=4;//最大IP位数 finalcharipSpace='.';//IP数字的分隔符 int[]ipNums=newint[ipSize]; StringBuildernumber=newStringBuilder();//当前操作的数字 StringBuilderbuff=newStringBuilder(address); intpoint=0;//当前操作的数字下标,最大到3. charcurrentChar; for(inti=0;i 0){ thrownewIllegalArgumentException("InvalidIPaddress."); } ipNums[point++]=Integer.parseInt(number.toString()); number.delete(0,number.length()); }else{ number.append(currentChar); } } ipNums[point]=Integer.parseInt(number.toString()); byte[]ipBuff=newbyte[ipSize]; intpointNum=0; for(inti=0;i<4;i++){ pointNum=Math.abs(ipNums[i]); if(pointNum>255){ thrownewIllegalArgumentException("InvalidIPaddress."); } ipBuff[i]=(byte)(pointNum&0xff); } returnipBuff; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。