较早的java版本没有直接提供base64编码处理的类,都是通过其他类库的附加功能实现。而对于android平台,又有自己的base64支持类, 导致代码影响跨平台。所以就自己写了个base64编码处理的类,这样就可以同一套代码运行在android平台和se平台了。
packagecom.hoverlees.utils;/***@authorhoverleeshttp://www.hoverlees.com* RFC 4648*/
public classBase64 {private static char[] base64Table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();private static byte[] base64TableMap=createTableMap();private static byte[] createTableMap() {byte[] table=new byte[256];for(int i=0;i<256;i++) table[i]=-1;for(int i=0;i
table[base64Table[i]]=(byte)i;
}returntable;
}/*** Base64编码,将字节数组转换成base64字符串
*@paramdata 字节数据
*@returnbase64编码的字符串*/
public static String encode(byte[] data){
StringBuffer s=newStringBuffer();int state=0;int pos=0;for(int i=0;i
state=(data[i]&0xFC)>>2;
s.append(base64Table[state]);
state=(data[i]&0x3)<<4;
pos=1;break;case 1:
state|=((data[i]&0xF0)>>4);
s.append(base64Table[state]);
state=(data[i]&0xF)<<2;
pos=2;break;case 2:
state|=((data[i]&0xC0)>>6);
s.append(base64Table[state]);
state=data[i]&0x3F;
s.append(base64Table[state]);
pos=0;break;
}
}if(pos==1){
s.append(base64Table[state]);
s.append("==");
}else if(pos==2){
s.append(base64Table[state]);
s.append("=");
}returns.toString();
}/*** Base64解码,将base64字符串转换成字节数组
*@paramdata base64的字符串
*@return解码后的字节数组*/
public static byte[] decode(String data){byte[] bytes=data.getBytes();int n=0;int pos=0;bytecchar,t;for(int i=0;i
cchar=bytes[i];
t=base64TableMap[cchar];if(cchar=='=') break;switch(pos){case 0:
bytes[n]=(byte)(t<<2);
pos=1;break;case 1:
bytes[n]=(byte)(bytes[n]|((t&0x30)>>4));
n++;
bytes[n]=(byte)((t&0xf)<<4);
pos=2;break;case 2:
bytes[n]=(byte)(bytes[n]|((t&0x3c)>>2));
n++;
bytes[n]=(byte)((t&0x3)<<6);
pos=3;break;case 3:
bytes[n]=(byte)(bytes[n]|t);
n++;
pos=0;break;
}
}byte[] r=new byte[n];for(int i=0;i
}
}