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;i0){
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;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。