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的相互转换实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!