java 流与 byte[] 的互转操作
1.InputStream->byte[]
引入apache.commons.is包
importorg.apache.commons.io.IOUtils;
byte[]bytes=IOUtils.toByteArray(inputStream);
2.byte[]->InputStream
InputStreaminputStream=newByteArrayInputStream(bytes);
补充知识:byte[]与各种数据类型互相转换示例
在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看
publicclassTestCase{ /** *short到字节数组的转换. */ publicstaticbyte[]shortToByte(shortnumber){ inttemp=number; byte[]b=newbyte[2]; for(inti=0;i>8;//向右移8位 } returnb; } /** *字节数组到short的转换. */ publicstaticshortbyteToShort(byte[]b){ shorts=0; shorts0=(short)(b[0]&0xff);//最低位 shorts1=(short)(b[1]&0xff); s1<<=8; s=(short)(s0|s1); returns; } /** *int到字节数组的转换. */ publicstaticbyte[]intToByte(intnumber){ inttemp=number; byte[]b=newbyte[4]; for(inti=0;i >8;//向右移8位 } returnb; } /** *字节数组到int的转换. */ publicstaticintbyteToInt(byte[]b){ ints=0; ints0=b[0]&0xff;//最低位 ints1=b[1]&0xff; ints2=b[2]&0xff; ints3=b[3]&0xff; s3<<=24; s2<<=16; s1<<=8; s=s0|s1|s2|s3; returns; } /** *long类型转成byte数组 */ publicstaticbyte[]longToByte(longnumber){ longtemp=number; byte[]b=newbyte[8]; for(inti=0;i >8;//向右移8位 } returnb; } /** *字节数组到long的转换. */ publicstaticlongbyteToLong(byte[]b){ longs=0; longs0=b[0]&0xff;//最低位 longs1=b[1]&0xff; longs2=b[2]&0xff; longs3=b[3]&0xff; longs4=b[4]&0xff;//最低位 longs5=b[5]&0xff; longs6=b[6]&0xff; longs7=b[7]&0xff; //s0不变 s1<<=8; s2<<=16; s3<<=24; s4<<=8*4; s5<<=8*5; s6<<=8*6; s7<<=8*7; s=s0|s1|s2|s3|s4|s5|s6|s7; returns; } /** *double到字节数组的转换. */ publicstaticbyte[]doubleToByte(doublenum){ byte[]b=newbyte[8]; longl=Double.doubleToLongBits(num); for(inti=0;i<8;i++){ b[i]=newLong(l).byteValue(); l=l>>8; } returnb; } /** *字节数组到double的转换. */ publicstaticdoublegetDouble(byte[]b){ longm; m=b[0]; m&=0xff; m|=((long)b[1]<<8); m&=0xffff; m|=((long)b[2]<<16); m&=0xffffff; m|=((long)b[3]<<24); m&=0xffffffffl; m|=((long)b[4]<<32); m&=0xffffffffffl; m|=((long)b[5]<<40); m&=0xffffffffffffl; m|=((long)b[6]<<48); m&=0xffffffffffffffl; m|=((long)b[7]<<56); returnDouble.longBitsToDouble(m); } /** *float到字节数组的转换. */ publicstaticvoidfloatToByte(floatx){ //先用Float.floatToIntBits(f)转换成int } /** *字节数组到float的转换. */ publicstaticfloatgetFloat(byte[]b){ //4bytes intaccum=0; for(intshiftBy=0;shiftBy<4;shiftBy++){ accum|=(b[shiftBy]&0xff)< >8); b[1]=(byte)(c&0xFF); returnb; } /** *字节数组到char的转换. */ publicstaticcharbyteToChar(byte[]b){ charc=(char)(((b[0]&0xFF)<<8)|(b[1]&0xFF)); returnc; } /** *string到字节数组的转换. */ publicstaticbyte[]stringToByte(Stringstr)throwsUnsupportedEncodingException{ returnstr.getBytes("GBK"); } /** *字节数组到String的转换. */ publicstaticStringbytesToString(byte[]str){ Stringkeyword=null; try{ keyword=newString(str,"GBK"); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } returnkeyword; } /** *object到字节数组的转换 */ @Test publicvoidtestObject2ByteArray()throwsIOException, ClassNotFoundException{ //Objectobj=""; Integer[]obj={1,3,4}; ////objecttobytearray ByteArrayOutputStreambo=newByteArrayOutputStream(); ObjectOutputStreamoo=newObjectOutputStream(bo); oo.writeObject(obj); byte[]bytes=bo.toByteArray(); bo.close(); oo.close(); System.out.println(Arrays.toString(bytes)); Integer[]intArr=(Integer[])testByteArray2Object(bytes); System.out.println(Arrays.asList(intArr)); byte[]b2=intToByte(123); System.out.println(Arrays.toString(b2)); inta=byteToInt(b2); System.out.println(a); } /** *字节数组到object的转换. */ privateObjecttestByteArray2Object(byte[]bytes)throwsIOException, ClassNotFoundException{ //byte[]bytes=null; Objectobj; //bytearraytoobject ByteArrayInputStreambi=newByteArrayInputStream(bytes); ObjectInputStreamoi=newObjectInputStream(bi); obj=oi.readObject(); bi.close(); oi.close(); System.out.println(obj); returnobj; } }
以上这篇java流与byte[]的互转操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。