Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码
首先是网上大神给的类
packagecom.duanlian.daimengmusic.utils; publicfinalclassBase64Util{ privatestaticfinalintBASELENGTH=128; privatestaticfinalintLOOKUPLENGTH=64; privatestaticfinalintTWENTYFOURBITGROUP=24; privatestaticfinalintEIGHTBIT=8; privatestaticfinalintSIXTEENBIT=16; privatestaticfinalintFOURBYTE=4; privatestaticfinalintSIGN=-128; privatestaticcharPAD='='; privatestaticbyte[]base64Alphabet=newbyte[BASELENGTH]; privatestaticchar[]lookUpBase64Alphabet=newchar[LOOKUPLENGTH]; static{ for(inti=0;i='A';i--){ base64Alphabet[i]=(byte)(i-'A'); } for(inti='z';i>='a';i--){ base64Alphabet[i]=(byte)(i-'a'+26); } for(inti='9';i>='0';i--){ base64Alphabet[i]=(byte)(i-'0'+52); } base64Alphabet['+']=62; base64Alphabet['/']=63; for(inti=0;i<=25;i++){ lookUpBase64Alphabet[i]=(char)('A'+i); } for(inti=26,j=0;i<=51;i++,j++){ lookUpBase64Alphabet[i]=(char)('a'+j); } for(inti=52,j=0;i<=61;i++,j++){ lookUpBase64Alphabet[i]=(char)('0'+j); } lookUpBase64Alphabet[62]=(char)'+'; lookUpBase64Alphabet[63]=(char)'/'; } privatestaticbooleanisWhiteSpace(charoctect){ return(octect==0x20||octect==0xd||octect==0xa||octect==0x9); } privatestaticbooleanisPad(charoctect){ return(octect==PAD); } privatestaticbooleanisData(charoctect){ return(octect >2) :(byte)((b1)>>2^0xc0); byteval2=((b2&SIGN)==0)?(byte)(b2>>4) :(byte)((b2)>>4^0xf0); byteval3=((b3&SIGN)==0)?(byte)(b3>>6) :(byte)((b3)>>6^0xfc); encodedData[encodedIndex++]=lookUpBase64Alphabet[val1]; encodedData[encodedIndex++]=lookUpBase64Alphabet[val2|(k<<4)]; encodedData[encodedIndex++]=lookUpBase64Alphabet[(l<<2)|val3]; encodedData[encodedIndex++]=lookUpBase64Alphabet[b3&0x3f]; } //formintegralnumberof6-bitgroups if(fewerThan24bits==EIGHTBIT){ b1=binaryData[dataIndex]; k=(byte)(b1&0x03); byteval1=((b1&SIGN)==0)?(byte)(b1>>2) :(byte)((b1)>>2^0xc0); encodedData[encodedIndex++]=lookUpBase64Alphabet[val1]; encodedData[encodedIndex++]=lookUpBase64Alphabet[k<<4]; encodedData[encodedIndex++]=PAD; encodedData[encodedIndex++]=PAD; }elseif(fewerThan24bits==SIXTEENBIT){ b1=binaryData[dataIndex]; b2=binaryData[dataIndex+1]; l=(byte)(b2&0x0f); k=(byte)(b1&0x03); byteval1=((b1&SIGN)==0)?(byte)(b1>>2) :(byte)((b1)>>2^0xc0); byteval2=((b2&SIGN)==0)?(byte)(b2>>4) :(byte)((b2)>>4^0xf0); encodedData[encodedIndex++]=lookUpBase64Alphabet[val1]; encodedData[encodedIndex++]=lookUpBase64Alphabet[val2|(k<<4)]; encodedData[encodedIndex++]=lookUpBase64Alphabet[l<<2]; encodedData[encodedIndex++]=PAD; } returnnewString(encodedData); } /** *把Base64位编码转换成byte数组 */ publicstaticbyte[]decode(Stringencoded){ if(encoded==null){ returnnull; } char[]base64Data=encoded.toCharArray(); //removewhitespaces intlen=removeWhiteSpace(base64Data); if(len%FOURBYTE!=0){ returnnull;//shouldbedivisiblebyfour } intnumberQuadruple=(len/FOURBYTE); if(numberQuadruple==0){ returnnewbyte[0]; } bytedecodedData[]=null; byteb1=0,b2=0,b3=0,b4=0; chard1=0,d2=0,d3=0,d4=0; inti=0; intencodedIndex=0; intdataIndex=0; decodedData=newbyte[(numberQuadruple)*3]; for(;i >4); decodedData[encodedIndex++]=(byte)(((b2&0xf)<<4)|((b3>>2)&0xf)); decodedData[encodedIndex++]=(byte)(b3<<6|b4); } if(!isData((d1=base64Data[dataIndex++])) ||!isData((d2=base64Data[dataIndex++]))){ returnnull;//iffound"nodata"justreturnnull } b1=base64Alphabet[d1]; b2=base64Alphabet[d2]; d3=base64Data[dataIndex++]; d4=base64Data[dataIndex++]; if(!isData((d3))||!isData((d4))){//CheckiftheyarePADcharacters if(isPad(d3)&&isPad(d4)){ if((b2&0xf)!=0)//last4bitsshouldbezero { returnnull; } byte[]tmp=newbyte[i*3+1]; System.arraycopy(decodedData,0,tmp,0,i*3); tmp[encodedIndex]=(byte)(b1<<2|b2>>4); returntmp; }elseif(!isPad(d3)&&isPad(d4)){ b3=base64Alphabet[d3]; if((b3&0x3)!=0)//last2bitsshouldbezero { returnnull; } byte[]tmp=newbyte[i*3+2]; System.arraycopy(decodedData,0,tmp,0,i*3); tmp[encodedIndex++]=(byte)(b1<<2|b2>>4); tmp[encodedIndex]=(byte)(((b2&0xf)<<4)|((b3>>2)&0xf)); returntmp; }else{ returnnull; } }else{//NoPADe.g3cQl b3=base64Alphabet[d3]; b4=base64Alphabet[d4]; decodedData[encodedIndex++]=(byte)(b1<<2|b2>>4); decodedData[encodedIndex++]=(byte)(((b2&0xf)<<4)|((b3>>2)&0xf)); decodedData[encodedIndex++]=(byte)(b3<<6|b4); } returndecodedData; } /** *removeWhiteSpacefromMIMEcontainingencodedBase64Utildata. * *@paramdata *thebytearrayofbase64data(withWS) *@returnthenewlength */ privatestaticintremoveWhiteSpace(char[]data){ if(data==null){ return0; } //countcharactersthat'snotwhitespace intnewSize=0; intlen=data.length; for(inti=0;i 然后是我经过2次封装的类,注释很清楚,拿过去直接用就行
packagecom.duanlian.daimengmusic.utils; importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.util.Base64; importjava.io.ByteArrayOutputStream; importjava.io.IOException; /** *转换编码 */ publicclassBase64Object{ /** *把base64的String码转换成正常显示的字符串 */ publicstaticStringbase64ToString(Stringbase64){ byte[]decode=Base64Util.decode(base64); Strings=newString(decode); returns; } /** *把String的转换成base64码 */ publicstaticStringstringToBase64(Stringss){ byte[]bytes=ss.getBytes(); Stringencode=Base64Util.encode(bytes); returnencode; } /** *bitmap转为base64 *@parambitmap *@return */ publicstaticStringbitmapToBase641(Bitmapbitmap){ Stringresult=null; ByteArrayOutputStreambaos=null; try{ if(bitmap!=null){ baos=newByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos); baos.flush(); baos.close(); byte[]bitmapBytes=baos.toByteArray(); result=Base64.encodeToString(bitmapBytes,Base64.DEFAULT); } }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(baos!=null){ baos.flush(); baos.close(); } }catch(IOExceptione){ e.printStackTrace(); } } returnresult; } /** *base64转为bitmap *@parambase64Data *@return */ publicstaticBitmapbase64ToBitmap(Stringbase64Data){ byte[]bytes=Base64.decode(base64Data,Base64.DEFAULT); returnBitmapFactory.decodeByteArray(bytes,0,bytes.length); } }以上所述是小编给大家介绍的JavaBase64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!